單鏈表也稱為線性鏈表或單向鏈表,它是線性表的鏈接存儲表示。
單鏈表的結構第一個結點(亦稱為首元結點)的地址可以通過鏈表的頭指針first找到,其他結點的地址則在前驅結點的link域中,鏈表的最后一個結點沒有后繼,在結點的link域中放一個空指針NULL,NULL在<iostream.h>中被定義為數值0,因此對單鏈表的任一結點的訪問必須首先根據頭指針找到首元結點,再按各節點的link域中存放的指針順序尋找。
頭指針first為空的鏈表為空表,該鏈表一個結點也沒有,相對的,頭指針first不為空且首元結點存在的單鏈表為非空表,表中至少有一個節點。
單鏈表的結構定義
1 typedef int DataType; 2 typedef struct node 3 { 4 DataType data; 5 struct node* link; 6 }LinkNode,* LinkList
尾插法創建一個單鏈表
1 #include<stdlib.h> 2 #include<iostream.h> 3 using namespace std; 4 void insertRear(LinkList& first,LinkNode* & last,DataType endTag) 5 { 6 //endTag是約定的輸入序列結束的標志,如果輸入序列是正整數,endTag可以使0或負數 7 //如果輸入序列是字符,endTag可以是字符集中不會出現的字符如"\0" 8 DataType val;cin>>val; 9 if(val==endTag) last->link=NULL; 10 else 11 { 12 last=new LinkNode; 13 if(!last) 14 { 15 cerr<<"存儲分配錯誤!\n";exit(1); 16 } 17 last->data=val; 18 insertRear(first,last->link,endTag); 19 } 20 }; 21 22 int main() 23 { 24 LinkList L=new LinkNode; 25 if(!L) {cerr<<"存儲分配錯誤!\n";exit(1);} 26 cin>>L->data; 27 LinkNode* rear=L; 28 insertRear(L,rear->link,L->data); 29 return 0; 30 }
在程序中還設置一個尾指針last,它總是指向新建表中最后一個結點,新結點鏈接到它所鏈尾的后面。last設定為引用型指針,它要把新建結點地址或是空地址傳送到前一結點的link域中。