C++课件 简单链表及其应用

上传人:无*** 文档编号:243903776 上传时间:2024-10-01 格式:PPT 页数:24 大小:549.50KB
返回 下载 相关 举报
C++课件 简单链表及其应用_第1页
第1页 / 共24页
C++课件 简单链表及其应用_第2页
第2页 / 共24页
C++课件 简单链表及其应用_第3页
第3页 / 共24页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,简单链表及其应用,链表,是指将一组同类型数据(通常为结构体类型)按其特有的方式连接在一起的一种数据结构。,链表中的元素称为,结点,。每一个结点都包含两类数据:一类数据称为结点的,值域,,它是描述该结点所包含的实际数据,可以由多个不同类型的数据构成;另一类数据称为,链域,,它用来存储与本结点相邻的结点的地址,其作用是将各个结点连接在一起,它通常是与结点同类型的指针。,任何一个链表都一个起始指针,,,称为该链表的,头指针,(,head,)。,链表的最后一个结点称为,尾结点,,它的链域指针不指向任何结点,通常将它设置为,空指针,。,特点,每个元素,(,表项,),由结点,(,Node,),构成。,线性结构,结点可以不连续存储,表可扩充,单链表,(Singly Linked List),data,link,a0,a1,a2,a3,a4,head,存储数据元素,存储后继结点,存储地址,头结点,空指针,单链表的存储映像,free,(a),可利用存储空间,a0,a2,a1,a3,free,head,(b),经过一段运行后的单链表结构,2000,A,2114,B,2056,C,NULL,2000,2114,2056,head,某单链表示意图如下:,头指针,head,110,hat,200,.,130,cat,135,135,eat,170,.,160,mat,Null,165,bat,130,170,fat,110,200,jat,205,205,lat,160,165,head,bat,cat,eat,mat,用,C+,语言描述的一个简单的单链表如下:,struct,node,int,data;,/,值域,node *next;,/,链域,;,例,.,建立一个简单的链表,它由,3,个学生数据的结点组成,,输出各结点中的数据。,#define NULL 0 p=head;,struct,student,do,long num;,cout,numscore;,float score;,p=p-next;,student *next;,while(p!=NULL);,;,void main()student a,b,c,*head,*p;,a.num=99101;a.score=89.5;,b.num=99103;b.score=90;,c.num=99107;c.score=85;,head=/*,将结点,a,的起始地址赋给头指针,head*/,a.next=/*,将结点,b,的起始地址赋给,a,结点的,next,成员*,/,b.next=,c.next=NULL;,.,创建无序链,表,一个链表是有若干个结点连接而成,创建链表实际上是创建链表中的各个结点,并将它们连接起来。,函数,nosorted_create,(),实现创建链表,其算法为:如果链表为空,(head=0),,,则将该结点设置为表头;如果链表非空,则将该结点加入到链表的末尾。,将结点设置为表头的过程如下图所示:,pNew,head,(b),加入结点后,head=,pNew,;,pEnd,=,pNew,;,pEnd,头结点,加入结点前,head=0;,pEnd,=,pNew,;,pEnd,head,pNew,将结点加到链表末尾的过程如下图所示:,next,data,next,next,data,data,头结点,结点,n,新结点,pNew,pEnd,head,(a),加入前,pNew,=new node;,next,next,data,data,头结点,结点,n,next,data,结点,n+1,head,(b),加入后,pEnd,-next=,pNew,;,pEnd,=,pNew,;,pEnd,pNew,链表创建结束,next,0,next,next,data,data,头结点,结点,n,新结点,pNew,pEnd,head,(a),结束前,pNew,=new node;,(b),结束后,pEnd,-next=0,;,delete,pNew,;,next,0,data,data,头结点,结点,n,pEnd,head,.,链,表的输出,void,ShowList(node,*head),if(,head=0,),cout,List is empty!,endl,;,return,;,node*temp=head;,cout,now the items of list are:n;,while(temp!=0),cout,datanext;,.,链,表某个结点的访问,node*access(node*,head,int,n)if(head=0),cout,List is empty!,endl,;return 0;node*temp;temp=head;,for(int,i=1;inext=0),cout,next;,return count;,.,访问,链,表尾结点,node*,accessTail(node,*head),if(head=0),return 0;,node*temp=head;,while(temp-next!=0),temp=temp-next;,return temp;,.,无序链表的插入,第一种情况:插入一个空表,head=,newnode,;,head-next=0;,(插入前)(插入后),head,newnode,newnode,head,第二种情况:在第一个结点前插入,newnode,-next=head;,head=,newnode,;,(插入前)(插入后),head,newnode,newnode,head,第三种情况:在链表中间插入,newnode,-next=current-next;,current-next=,newnode,;,(,插入前,)(,插入后,),newnode,current,newnode,current,第四种情况:在链表末尾插入,tail-next=,newnode,;,newnode,-next=0;,(,插入前,)(,插入后,),newnode,newnode,tail,tail,第一种情况,:,删除表中第一个元素,pcur,=head;head=head-next;delete,pcur,;,a,1,a,1,a,2,a,2,a,3,a,3,head,删除前,删除后,.,无序链表结点的删除,head,p,第二种情况,:,删除表中或表尾元素,p-next=q-next;delete q;,a,i-1,a,i-1,a,i,a,i,a,i+1,a,i+1,q,删除前,删除后,.,创建有序链表,所谓,有序链表,,是指链表中的结点按结点的某个成员的大小进行排列。,将一个结点插入到有序链表中时,为了保持有序性,要判断插入的位置。函数,insert_sort_node(node*&,node*&),。,通过上述插入函数,可以创建一个有序链表。,函数,sorted_create(),。,.,链表的删除,void,deletelist(node,*&head),node*temp;,while(head),temp=head;,head=head-next;,delete temp;,.,无序链表的排序,void convert(),int,temp,i,j;node*,pcur,=head;for(i=1;inode_count(head);i+)for(j=1;jdata,pcur,-next-data)temp=,pcur,-data;,pcur,-data=,pcur,-next-data;,pcur,-next-data=temp;,pcur,=,pcur,-next;,pcur,=head;,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!