双向链表精选.ppt

  1. 1、本文档共18页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
双向链表精选

设某个环形链表的长度大于1,且表中即无头指针 也无头结点,已知s为指向链表中某个结点的指针, 试编写算法在链表中删除s所指结点的前驱结点 s void dele(s) NODE *s; { NODE *p,*q; p=s; while (p-link!=s) { q=p; p=p-link;} q-link=s; free(p); } 编写在链表中s结点之前插入新结点的算法 s q p 要访问某个结点的前趋结点很麻烦,…... 要删除链表中一个结点时,仅给出该结点的指针还不行…… 在指定的结点之前插入一个新结点….. 双向链表 左指针:llink 指向该结点的前趋结点 右指针:rlink 指向该结点的后继结点 llink data rlink #include stdio.h struct node { char data; struct node *llink,*rlink; }; typedef struct node NODE; NODE *head; 双向链表 ^ head ^ …... ^ …... 空的双向链表 非空的双向链表 head head=NULL 环形双向链表 ^ head …... …... 空的环形双向链表 非空的环形双向链表 head p-rlink-llink= p-llink-rlink= p 带表头结点的双向链表 head 空的带表头结点双向链表 ^ ^ …... ^ …... 非空的带表头结点双向链表 ^ head 带表头结点的环形双向链表 head 空的带表头结点环形双向链表 …... …... 非空的带表头结点环形双向链表 head 带表头的环形双向链表的插入 …... ^ …... x p y 1 4 q 2 3 * * 将值为y的结点插在值为x的结点之后 1.q-rlink=p-rlink 2.p-rlink=q 3.q-rlink-llink=q 4.q-llink=p int insert_d_l(head,x,y) NODE *head; char x,y; { NODE *p,*q; p=head-rlink; while (p!=head p-data!=x) p=p-rlink; if (p= =head) return(1); q=(NODE*)malloc(sizeof(NODE)); q-data=y; q-rlink=p-rlink; p-rlink=q; q-rlink-llink=q; q-llink=p; return(0); } 带表头的环形双向链表的删除 …... ^ …... x * * p * * 1 2 p-llink-rlink=p-rlink p-rlink-llink=p-llink int delete-d-l(head,x) NODE *head; char x; { NODE *p; p=head-rlink; while (p!=head p-data!=x) p=p-rlink; if (p= =head) return(1); P-llink-rlink=p-rlink; p-rlink-llink=p-llink; free(p); return(0); } 删除双向环形链表中第k(k0)个结点 ……. for(j=0;jkp!=head;j++) p=p-rlink; if(p==head) return(1); p-llink-rlink=p-rlink; p-rlink-llink=p-llink; free(p); return(0); 第二次作业 1.试编写一个求已知单链表的数据域的平均值的函数 2.已知带有头结点的环形链表中头指针为head,试写出删除并释放数据域值为x的所有结点的函数

文档评论(0)

tazhiq2 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档