数据结构-第3课第二章线性表(链表).pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
2.3 线性表的链式表示和实现; 其中:data域是数据域,用来存放结点的值。next是指针域(亦称链域),用来存放结点的直接后继的地址(或位置)。 链表正是通过每个结点的链域将线性表的n个结点按其逻辑次序链接在一起的。由于上述链表的每一个结点只有一个链域,故将这种链表称为单链表(Single Linked)。 显然,单链表中每个结点的存储地址是存放在其前趋结点next域中,而开始结点无前趋,故应设头指针head指向开始结点。同时,由于最后一个结点无后继,故结点的指针域为空,即NULL(图示中常用^表示)。 ;例1、线性表:(bat,cat,eat,fat,hat,jat,lat,mat); 单链表是由表头唯一确定,因此单链表可以用头指针的名字来命名。; 一旦p所指的结点变量不再需要了,应该通过 delete p;释放所指的结点变量空间。;一、建立单链表 问题:假设线性表中结点的数据类???是字符,逐个输入这些字符型的数据,并以换行符‘$’为输入结束标记。 动态地建立单链表的常用方法有如下两种: 1、头插法建表 该方法从一个空表开始,重复读入数据,生成新结点,将读入数据存放到新结点的数据域中,然后将新结点插入到当前链表的表头上,直到读入结束标志(比如$)为止。;void CreateList1( LNode *h) { char ch; LNode *p; h=NULL; cinch; while (ch!=‘$’){ p=new LNode; p–data=ch; p–next=h; h=p; cin ch; } } ;;类表示; { p=new LNode; p-data=ch; p-next=head; head=p; cin ch; } } /* void List::CreateList1( List h) { char ch; LNode *p; cinch; while (ch!=$) { p=new LNode; p-data=ch; p-next=head; ;2、尾插法建表 头插法建立链表虽然算法简单,但生成的链表中结点的次序和输入的顺序相反。若希望二者次序一致,可采用尾插法建表。该方法是将新结点插入到当前链表的表尾上。 为此必须增加一个尾指针r,使其始终指向当前链表的尾结点。例:;头结点(哨兵结点)引入: 增加一个表头结点,数据域可根据需要使用或不用。; 上述算法里动态申请新结点空间时未加错误处理,在实际使用时间,可作下列判定与处理: p= new LNode; if(p= =NULL) 错误处理; ;二、查找运算 1、按序号查找 在链表中,即使知道被访问结点的序号i,也不能象顺序表中那样直接按序号i访问结点,而只能从链表的头指针出发,顺链域next逐个结点往下搜索,直到搜索到第i个结点为止。因此,链表不是随机存取结构。 设单链表的长度为n,要查找表中第i个结点,仅当1=i=n时,i的值是合法的。但有时需要找头结点的位置,故我们将头结点看做是第0个结点,其算法如下:;LNode * getnode( head ,i) //在链表head中取第i个数据链表有头结点 { p=head; j=0; //计数用 while(p–next ji){ p=p–next; j++; } if (i==j) return p; else return NULL; };2、按值查找 按值查找是在链表中,查找是否有结点值等于给定值key的结点,若有,则返回首次找到的其值为key的结点的存储位置;否则返回NULL。查找过程从开始结点出发,顺着链表逐个将结点的值和给定值key作比较。其算法如下:;三、插入运算 插入运算是将值为x的新结点插入到表的第i个结点的位置上,即插入到ai-1与ai之间。因此,必须首先找到ai-1的存储位置p,然后生成一个数据域为x的新结点,并令q指针指向该新结点,新结点的指针域指向结点ai。从而实现三个结点ai-1,x和ai之间的逻辑关系的变化;三、插入运算 插入运算是将值为x的新结点插入到表的第i个结点的位置上,即插入到ai-1与ai之间。因此,必须首先找到ai-1的存储位置

文档评论(0)

wyw118 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档