链表操作为什么要双指针而顺序表只要单指针

C语言 码拜 9年前 (2016-04-11) 1458次浏览
/*链表结点定义和链表创建和取元素操作*/
struct LNode  
{  
    ElemType data;  
    struct LNode *next;  
}LNode,*LinkList;
void CreateList_L(LinkList *L,int n) /*创建链表直接使用单重指针就可以了啊,
参数列表应该是LNode *L或LinkList L,为什么要使用双重呢,使用双重指针
存放指针的地址,改变指针的值有什么作用,这个初始化过程从指针的地址传
进来是怎么继续下去的呢?*/
{  
    int i;  
    LinkList p;  
    *L=(LinkList)malloc(sizeof(struct LNode));  
    (*L)->next=NULL;  
    for(i=n; i>0; --i)  
    {  
        p=(LinkList)malloc(sizeof(struct LNode)); 
        scanf("%d",&p->data);  
        p->next=(*L)->next;   
        (*L)->next=p;  
    }  
}
Status GetElem(LinkList L,int i,ElemType *e) /*取元素不改变原值参数列表
应该像顺便表取元素值一样不用指针,用LNode L,为什么要使用指针?*/
{  
    int j=1; 
    LinkList p=L->next; 
    while(p&&j<i) 
    {  
        p=p->next;  
        j++;  
    }  
    if(!p||j>i) 
        return ERROR;  
    *e=p->data;   
    return OK;  
} 
/*以下为顺序表初始化和取元素操作*/
typedef struct
{
	ElemType *elem;
	int length;
	int listsize;
}SqList;
Status InitList_Sq(SqList *L)//初始化改变原值用指针
{
	L->elem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));
	if(!L->elem) exit(OVERFLOW);
	L->length=0;
	L->listsize=LIST_INIT_SIZE;
	return OK;
}
int GetElem(SqList L,int i,ElemType *e)//取元素不改变原值,参数列表不用指针
{
	if(i<1||i>L.length) return 0;
	*e=L.elem[i-1];
	return 1;
}
解决方案

20

链表的头指针,是个非常重要的东西
它在程序的使用中,代表整个链表。
创建链表,需要给头指针赋值,尤其是不带空头节点的单链表
一级指针,不能改变链表的头指针,
只有传递二级指针,才可以
另外一般都说 一级指针,二级指针,。多级指针
很少有人说双重指针的,三重指针的

40

你假如想在某个函数内改变指针的指向,那么需要传二级指针。
假设你main函数里定义了一个指针叫head,然后调用fun函数(形参名叫h2)
你假如传的是一级指针,那么仅仅只是head和h2所指的是同一块内存区域,而h2和head本身并不是同一个指针

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明链表操作为什么要双指针而顺序表只要单指针
喜欢 (1)
[1034331897@qq.com]
分享 (0)