单链表也称为线性链表或单向链表,它是线性表的链接存储表示。
单链表的结构第一个结点(亦称为首元结点)的地址可以通过链表的头指针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域中。