函數main()里的語句LinkListL;系統自動給變量L分配了內存,
L對應的是第2個結構體,也就是LinkList.
調用初始化函數InitList(),給變量L里的成員head,tail,len進行賦值,
L.head指向的就是空鏈表,此時,L.head=NULL,同時,L.len=0,表示沒有結點.
所以執行函數InitList()之后,也就制造了空鏈表.
執行函數InsertNode()之后,鏈表就加入了新結點,結點對應的是第1個結構體,也就是LNode
L.head指向鏈表的頭結點,L.tail指向鏈表的末尾結點,L.len表示結點的數量.
測試結果:
初始化之后,鏈表長度是0
插入數據之后,鏈表長度是3
鏈表里的數據是:102030
//代碼用了"引用"(&),所以要用C++編譯器進行測試
#include<stdio.h>
#include<stdlib.h>
typedefintElemType;
typedefintStatus;
typedefstructLNode
{
ElemTypedata;
structLNode*next;
}*Link,*Position;
typedefstruct
{
Linkhead,tail;
intlen;
}LinkList;
StatusInitList(LinkList&L);
StatusInsertNode(LinkList&L,ElemTypee);
StatusListTraverse(LinkListL);
intListLength(LinkListL);
//鏈表初始化
StatusInitList(LinkList&L)//&是"引用"符號
{
L.head=NULL;
L.tail=NULL;
L.len=0;
return1;
}
//插入結點
StatusInsertNode(LinkList&L,ElemTypee)//&是"引用"符號
{
LNode*newNode;
newNode=(LNode*)malloc(sizeof(LNode));
if(newNode==NULL)
{
printf("\n分配內存錯誤.\n");
exit(1);
}
newNode->data=e;
newNode->next=NULL;
//用"尾插法"添加新結點
if(L.head==NULL)
{
L.head=newNode;
L.tail=newNode;
L.len=1;
}
else
{
L.tail->next=newNode;
L.tail=newNode;
L.len=L.len+1;
}
return1;
}
//鏈表遍歷
StatusListTraverse(LinkListL)
{
Linkp;
p=L.head;
if(p==NULL)
{
printf("\n鏈表為空.\n");
return0;
}
while(p!=NULL)
{
printf("%d",p->data);
p=p->next;
}
printf("\n");
return1;
}
//鏈表長度
intListLength(LinkListL)
{
returnL.len;
}
intmain()
{
LinkListL;
InitList(L);
printf("初始化之后,鏈表長度是%d\n",ListLength(L));
InsertNode(L,10);
InsertNode(L,20);
InsertNode(L,30);
printf("插入數據之后,鏈表長度是%d\n",ListLength(L));
printf("鏈表里的數據是:");
ListTraverse(L);
return0;
}