实验7-链表.ppt

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

链表 实验七 7-1 以下程序中已经建立一个带有头结点的单项链表,表中各结点按数据域的递增有序链接。函数fun()的功能是把形参x的值放入一个新结点并插入到链表中。插入后链表的数据域仍保持递增有序。试填空并编程实现。 typedef struct list { int data; struct list *next; }SLIST; 7-2 下面的程序将键盘输入的字符串通过函数ins()建立反序链表,然后输出链表。试填空并编程实现。 #includestdio.h #includestdlib.h struct NODE { char data; struct NODE *link; }*head; void ins(struct NODE *q) { if(head==NULL) { q-link=NULL; head=q; } else { q-link=head; (1) ; } } 7-3 定义一个结构类型(包括学号、成绩),并建立一个有序链表。 编写一个函数能将节点中提供的学号和成绩按成绩高低顺序插入到该链表中。 7-4 已有两个链表heada和headb,编写函数将两者合并成一个链表并返回该链表的头指针。 7-5 要求用链表实现程序。13个人围成一圈,从第1个人开始顺序报号1、2、3.凡报到“3”者退出圈子,找出最后留在圈子中的人原来的序号。 * 图11.20 99101 head p1 99103 99107 NULL (a) (b) 99101 head 99103 99107 NULL p2 p1 原链表 P1指向头结点 P2指向p1指向的结点。P1指向下移一个结点。 * 图11.20 99101 head 99103 99107 NULL p1 99101 head 99103 99107 NULL p2 p1 (c) (d) 经判断后,第1个结点是要删除的结点,head指向第2个结点,第1个结点脱离。 经P1找到要删除的结点后使之脱离。 * 例 题 10 struct student *del( struct student *head, long num ) { struct student *p1, *p2; if(head==NULL) {printf(\nlist null!\n); goto end; } p1=head; while(num!=p1-nump1-next!==NULL) { p2=p1; p1=p1-next; } if(num==p1-num) { if(p1==head) head=p1-next; else p2-next=p1-next; printf(delete:%ld\n,num); n=n-1; } else printf(%ld not been found!\n,num); end: return(head); } 找到了 没找到 * 11.7.7 对链表的插入操作 插入结点:将一个结点插入到已有的链表中 插入原则: 1、插入操作不应破坏原链接关系 2、插入的结点应该在它该在的位置 实现方法: 应该有一个插入位置的查找子过程 共有三种情况: 1、插入的结点最小 2、插入的结点最大 3、插入的结点在中间 * 操 作 分 析 同删除一样,需要几个临时指针: P0: 指向待插的结点;初始化:p0=数组stu; P1: 指向要在P1之前插入结点;初始化: p1=head; P2: 指向要在P2之后插入结点; 插入操作:当符合以下条件时:p0-num 与 p1-num 比较找位置 if(p0-nump1-num)(p1-next!=NULL) 则插入的结点不在p1所指结点之前;指针后移,交给p2; p1= p1-next; p2=p1; 则继续与 p0 指向的数组去比,直到(p1-next!=NULL)为止。 否则有两种情况发生: if(head==p1) head=p0;p0-next=p1插到原来第一个结点之前; else p2-next=p0;p0-next=p1; 插到 p2 指向的结点之后; 还有另外一种情况:插到最后的结点之后; p1-next=p0;p0-next=NULL; * 图11.22 99101 head p1 99103 99107 NULL (a) 99102 p0 * 图11.22 99101 head 99

文档评论(0)

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

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

1亿VIP精品文档

相关文档