数据结构之单链表<尾插法>


单链表也称为线性链表或单向链表,它是线性表的链接存储表示。

单链表的结构第一个结点(亦称为首元结点)的地址可以通过链表的头指针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域中。

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM