单链表和循环链表.ppt

单链表和循环链表.ppt

ID:48074266

大小:593.50 KB

页数:34页

时间:2019-05-06

单链表和循环链表.ppt_第1页
单链表和循环链表.ppt_第2页
单链表和循环链表.ppt_第3页
单链表和循环链表.ppt_第4页
单链表和循环链表.ppt_第5页
资源描述:

《单链表和循环链表.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、线性链表链表是指用一组任意的存储单元依次存放线性表的结点,这组存储单元即可以是连续的,也可以是不连续的,甚至是零散分布在内存中的任意位置。链表中结点的逻辑次序和物理次序不一定相同。为了能正确表示结点间的逻辑关系,在存储每个结点值的同时,还必须存储指示其后继结点的地址(或位置)信息,这个信息称为指针(pointer)或链(link)。1链表中的结点结构其中:data域是数据域,用来存放结点的值。next是指针域(亦称链域),用来存放结点的直接后继的地址(或位置)。链表通过每个结点的链域将线性表的n个结点按其逻辑次序链接在

2、一起的。上述链表的每一个结点只有一个链域,故将这种链表称为单链表(SingleLinked)。单链表中每个结点的存储地址是存放在其前趋结点的next域中,而开始结点无前趋,故应设头指针head指向开始结点。同时,由于终端结点无后继,故终端结点的指针域为空,即为NULL.2datanext例线性表(ZHAO,QIAN,SUN,LI,ZHOU,WU,ZHENG,WANG)3通常我们把链表画成用箭头相链接的结点的序列,结点之间的箭头表示链域中的指针。单链表可由头指针惟一确定4C语言类型描述typedefstructnode{

3、datatypedata;/*数据元素类型*/structnode*next;/*指针类型*/}node,*lklist;/*结点类型*/node是结点类型lklist是指向node类型的指针lklistp,声明一个指向node类型的指针*p由两个域组成的记录,用(*p).data和(*p).next表示,通常记成p->data和p->next,分别用来存放数据元素的值和后继结点的地址5有时,我们在单链表的第一个结点之前附设一个结点,称为头结点头结点的数据域可以不储存任何信息,也可存储如线性表的长度等附加信息头结点的指

4、针域存储指向第一个结点的指针。非空表空表6单链表上的一些基本操作初始化initiate_lklist(l)定义建立如右图所示的一个空表算法voidinitiate_lklist(lklist&l){l=newnode;l->next=NULL;}7L头结点、尾结点NULL2.求表长length_lklist(l)定义求单链表中结点数目基本思想从头到尾数一遍算法intlength_lklist(lklistl){lklistp=l;/*工作指针p从头结点开始*/intj=0;/*计数器从0开始,因为有头结点*/while

5、(p->next!=NULL)/*p所指结点不是尾结点*/{p=p->next;/*p指向下一个结点,即往下数*/j++;/*计数器加1*/}return(j);}83.按序号查找find_lklist(l,i)定义查找单链表第i个元素,否则返回NULL基本思想从头指针出发,顺链域next逐个往下搜索,直到找到第i个结点为止9算法node*find_lklist(lklistl,inti){lklistp=l;intj=0;/*初始化*/while((p->next!=NULL)&&(j

6、没找到*/{p=p->next;/*找下一个*/j++;/*记数器加1*/}if(j==i)return(p);/*找到第i个,返回其指针*/elsereturn(NULL);}104.定位locate_lklist(l,x)定义按值查找,返回线性表l中第一个值与x相等的结点序号,否则为0基本思想从头指针出发,顺链域next逐个往下搜索,直到找到值为x的结点为止11算法intlocate_lklist(lklistl,datatypex){lklistp=l;intj=0;/*初始化*/while((p->next!=

7、NULL)&&(p->data!=x))/*p所指不是尾结点且还没找到*/{p=p->next;/*找下一个*/j++;}/*记数器加1*/if(p->data==x)return(j);/*找到x,并返回j*/elsereturn(0);/*没找到,返回0*/}125.读表元get_lklist(l,i)定义求链表l第i个结点的值,若找不到返回NULL基本思想类似按序号查找13算法datatypeget_lklist(lklistl,inti){lklistp=l;intj=0;/*初始化*/while((p->ne

8、xt!=NULL)&&(jnext;/*找下一个*/j++;/*记数器加1*/}if(j==i)return(p->data);/*找到第i个*/else{printf("参数i错或单链表不存在");return(NULL);}}146.插入insert_lklist(l,x,

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。