数据结构第2讲.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文档。上传文档
查看更多
(1) 在双向链表中插入一个结点。 假设结点s已准备好,如图2.15所示,操作语句组如下: { s-next=p; s-prior=p-prior; p-prior-next=s; p-prior=s; } 图2.15 在双向链表中插入结点 (2) 在双向链表中删除一个结点。如图2.16所示,语句组如下: { p-prior-next=p-next; p-next-prior=p-prior; free(p); } 图2.16 在双向链表中删除一个结点 2.4.3 顺序存储结构与链表存储结构的综合分析与比较 从前几节的讨论中我们还可以看出,用顺序的方式存储线性表,内存的存储密度高,在结点等长时,可以随机地存取结点;但是对顺序表的插入和删除往往造成大量信息的移动,效率比较低。另外,顺序表要求占用连续的存储空间,存储分配只能预先进行。如果插入操作超出了预先分配的存储区间,需要临时扩大是非常困难的。而采用链表存储结构时则可以克服上述不足,它适合于频繁插入和删除并且存储空间大小不能预先确定的线性表,但是在链表中不可随机地存取结点。 3. 指针变量的主要操作 图2.3 指针变量的主要操作示意图 2.3.2 线性链表基本运算的实现 1. 插入 (1) 在已知P指针所指向的结点后插入一个元素x,操作如图2.4所示: 图2.4 单链表的简单插入 P指针假设为已知条件。在已知结点的后边进行插入,操作较为简单,不用查找便可直接插入。相关操作的语句组如下: { s=(Lnode*) malloc (sizeof(Lnode)); s-data=x; s-next=p-next; p-next=s; } (2) 在P指针所指向的结点前插入一个元素x,操作如图2.5所示。 图2.5 单链表的‘前’插入 先设一指针q从头结点开始向后移动进行查找,直到q指向p的前趋结点为止。然后在q指针所指结点之后,p指针所指结点之前进行插入。在已知结点的前边进行插入,操作较为复杂,需先查找然后插入。有关操作的语句组如下: { q=head; while(q-next!=p) q=q-next; /*通过循环查找p的前驱结点*/ s=(Lnode*) malloc (sizeof(Lnode)); s-data=x; s-next=p; q-next=s; } (3) 在线性表中值为x的元素前插入一个值为y的数据元素。如果值为x的结点不存在,则将y插在表尾。如图2.6所示。 图2.6 单链表的一般插入 算法思想:这里已知条件应该是链表的头指针h和x、y。先设一指针p从头结点h的下一个结点开始向后查找值为x的结点,同时还需用另一个指针q 从头结点开始紧跟在指针p后面。当指针p到位时(p指向值为x的结点),q正好指向它的前趋结点,然后在q与p结点之间插入。也即在q所指向的结点之后进行插入。具体算法如下。 算法 2.5 void Insert(Lnode *head,ElemType x,ElemType y) { s=(Lnode*) malloc (sizeof(Lnode)); s-data=y; q=head; p=q-next; while(( p!=NULL)(p-data!=x)) { q=p; p=p-next; } s-next=p; q-next=s; } 请注意这里是双条件循环,当p指针还未移动到链表尾部并且p结点的数据域不等于x时,继续循环下去。 (4) 在链表的第i个元素结点处插入值为y的元素。 算法思想:与前一插入算法比较,已知条件除了头指针head和即将插入的y之外,另一个已知条件不再是某个结点的值域而是结点的序号i。这样一来不仅需先设一指针p从头结点开始,而且同时设置一个记数变量k从零开始,p每向前移动一次,k便加1,循环到k等于i-1为止。当指针p到位时(p指向序号为i-1的

文档评论(0)

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

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

1亿VIP精品文档

相关文档