C程序设计第九章ppt西工大.ppt

  1. 1、本文档共89页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
在一个 循环链表中, 首节点和末节点被连接在一起。这种方式在单向和双向链表中皆可实现 * (有时也称为约瑟夫斯置换,是一个出现在计算机科学和数学中的问题。在计算机编程的算法中,类似问题又称为约瑟夫环。又称“丢手绢问题”.) 。 * (有时也称为约瑟夫斯置换,是一个出现在计算机科学和数学中的问题。在计算机编程的算法中,类似问题又称为约瑟夫环。又称“丢手绢问题”.) 。 * * 9.4.1 单链表插入结点 图9.8 单链表插入结点示意 * 9.4.1 单链表插入结点 图9.8 单链表插入结点示意 * 9.4.1 单链表插入结点 图9.8 单链表插入结点示意 总结:插入节点需要知道插入点之前的节点位置p。 * 9.4.1 单链表插入结点 实现上述步骤的C语言语句如下: 请注意,这两个表达式的顺序不能颠倒。因为若先修改结点p的指针域指向结点 s,结点p的后一个结点(p-next )就此从链表中断开,再让结点s的指针域指向结点p的后一个结点已成错误的。 在单链表中第i个位置上插入元素e的新结点s的算法如下: s-next=p-next, p-next=s; //结点插入算法 节点的插入 插入可分为随意插入和按顺序插入,随意插 入包括插入到头部、尾部或中间指定位置;按顺 序插入是指按某关键字的顺序插入,而在插入前 链表必须已按该关键字进行了排序。 按顺序插入的步骤: 开辟待插入节点的存储区域并输入数据; 2) 查找插入位置:从链表首节点开始按关键字成 员与待插入节点相同成员进行比较,直到确定了插入位置; 3) 将插入位置前一节点的“链节”成员赋给待插入节点的“链节”成员; 4) 将待插入节点的指针赋给前一节点“链节”成员; 若:插入点在链头,先将头指针赋给插入节点的指针域,再将待插入节点的指针赋给头指针变量。 2101 89.5 1370 head 1048 2304 90 1012 2414 78 1048 1370 1012 1012 2680 2680 2918 85 NULL 1394 91 1048 2030 2030 【例】在上例增加“按学号插入节点的函数” 插入函数: struct tagSTU *insert(struct tagSTU *head) { struct tagSTU *p0, *p1, *p2; long n; int len; len=sizeof(struct tagSTU); p0=(struct tagSTU *)malloc(len); //申请新节点 printf(Enter num,score to insert:); scanf(%ld,%f, p0-num, p0-score); n=p0-num; //产生学号副本n p1=head; //从首节点开始查找 ┇ ┇ p1=head; //↓插入在头部 if(np1-num) { p0-next=head; head=p0; } else { do //查找插入位置 { p2=p1; p1=p1-next; } while(p1!=NULL np1-num); p0-next=p2-next; //插入点在p1之前位置 p2-next=p0; } return(head); } //insert SX09-12 * 9.4.2 单链表删除结点 结点删除操作是指将链表中的某个结点从链表中删除。删除位置可能在头结点、尾结点或者链表中间,删除操作后需要释放删除结点的内存空间。 将链表中第i个结点删去的方法是先在单链表中找到第i-1个结点p,再删除其后的结点,如图(a)所示。若要删除结点p的后一个结点(即p-next ),只需要将p的指针域指向p-next的后一个结点(即p-next-next ),如图(b)所示。 * 9.4.2 单链表删除结点 图9.9 单链表删除结点示意 * 9.4.2 单链表删除结点 图9.9 单链表删除结点示意 第一步:将予删除节点后一个节点连到d前一个节点 * 9.4.2 单链表删除结点 图9.9 单链表删除结点示意 第二步:将予删除节点的内存空间释放 free(d); //释放结点 实现分析:需要保存访问节点的前一个节

文档评论(0)

2232文档 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档