数据结构,链表LinkList *L与LinkList L和Lnode

数据结构 单链表
类型定义:
typedef struct lnode
{
elemtype data;
struct lnode *next;
}Lnode, *LinkList;

int InitList(LinkList *L)//构造一个空的线性表L
{ 构造一个空的线性表L
*L=(LinkList)malloc(sizeof(struct LNode));
if(!*L) /* 存储分配失败 */
exit(OVERFLOW);
(*L)->next=NULL; /* 指针域为空 */
return OK;
}

int ListInsert(LinkList L,int i,ElemType e) //在带头结点的单链线性表L中第i个位置之前插入元素e
{
int j=0;
LinkList p=L,s;
while(p&&j<i-1) /* 寻找第i-1个结点 */
{
p=p->next;
j++;
}
if(!p||j>i-1) /* i小于1或者大于表长 */
return ERROR;
s=(LinkList)malloc(sizeof(struct LNode)); /* 生成新结点 */
s->data=e; /* 插入L中 */
s->next=p->next;
p->next=s;
return OK;
}

void main()
{
LinkList L;
ElemType e;
int i;
int j;
i=InitList(&L);
for(j=1;j<=10;j++)
ListInsert(L,j,j);
}
在类型定义中linklist已经是指向节点的指针了,为什么在构造一个空的线性表L的函数int InitList(LinkList *L) 中形参为LinkList *L(即L为指向指针的指针),而不是LinkList L????linklist作为一个指针也可以操作链表的呀!!!
在链表插入函数int ListInsert(LinkList L,int i,ElemType e)中,形参为什么却变成了LinkList L???
在main函数中定义的是指针变量LinkList L; 为何不定义成Lnode L????
函数的形参什么时候该用LinkList *L,什么时候该用LinkList L,什么时候该用Lnode L?????它们的区别是什么????望大神详细回答,感激万分!!!

LNode是指你定义的结点类型,就是大括号中的包含指针域和数值域的变量。*LinkList是指你所定义的是一个链表不是单个结点。。LinkListL;L=malloc(sizeof(LinkList));是指申请一个链表的头结点的空间,并使该链表的指针指向该结点。。。因为理论上说链表空间可以无限,即整个内存的空间都可以为其所用,所以无需提前指定链表空间大小也可以继续申请下一个结点的空间。。LinkListL;是指定义一个链表。L=malloc(sizeof(LinkList));是指为该链表申请头结点,并使该链表的指针指向该结点LNode*p;p=malloc(sizeof(LNode));与上句不同,这句是指你申请一个结点的空间。LNode*p;是先定义一个结点。p=malloc(sizeof(LNode));是指为该结点申请内存空间。。注意一个结点和一个链表的区别就可以了。。
温馨提示:答案为网友推荐,仅供参考
相似回答