C语言程序设计教程 第2版 普通高等教育“十一五”国家级规划教材 作者 李丽娟 C第2版(第9章_结构).pptVIP

C语言程序设计教程 第2版 普通高等教育“十一五”国家级规划教材 作者 李丽娟 C第2版(第9章_结构).ppt

  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文档。上传文档
查看更多
9.6 链表的概念 9.6.3 从单链表中删除结点 ?在链表中删去一个结点,不允许破坏原链表的结构。 例如,对于这样的自引用结构: struct node { int n; struct node *next; }; 假定已建好链表: 删除s节点后的链表: 9.6 链表的概念 ?删除节点方法:修改指针域的值。 ?根据被删节点的位置,修改指针域的方法要分3种不同情况: ① s结点在表的中间(即不在表头,也不在表尾): p-next=s-next; ② s结点位于表头: head=s-next; ③ s结点位于表尾: p-next=NULL; ?结点删除后,用free( )函数释放被删除结点所占用的内存空间。 例如:free(s); /* 释放了节点s所占用的空间。 */ 9.6 链表的概念 例9:修改例9-8的程序,再从键盘输入一个要删除的站点名,并将删除后的站点依次输出。 分析:在例9-8程序的基础上增加一个删除节点的函数: struct station *del_sta(struct station *h, char *str); 函数功能: 在h所指的链表中,删除结点值为str所指字符串的结点。 ?程序: example9_9.c 请分析函数: struct station *del_sta(struct station *h,char *str);的算法。 思考程序中存在的问题,怎样处理可以使程序更加完善? 9.6 链表的概念 9.6.4 向链表中插入结点 ?插入节点方法:修改指针域的值。 ?根据节点插入的位置,修改指针域的方法要分3种不同情况: ① s结点插入到表中(即不在表头,也不在表尾) ?修改指针: s-next=t; p-next=s; 9.6 链表的概念 ② s结点插入到表头。 图(a)所示为插入前的链表,图(b)所示为插入后的链表。 ?修改指针: s-next=t; head=s; 9.6 链表的概念 ② s结点插入到表尾。 图(a)所示为插入前的链表,图(b)所示为插入后的链表。 ?修改指针: p-next=s; s-next=NULL; 9.6 链表的概念 例10:修改例9-8的程序,从键盘输入一个要加入的站点名,并将加入后的站点依次输出。 分析:可以在例9-8程序的基础上增加一个增加节点的函数: struct station *add_sta(struct station *h,char *stradd, char *strafter); 函数功能: 将stradd所指的站点插入到h链表中站点原有的站点strafter的后面。 ?程序:example9_10.c 9.7 程 序 范 例 例11:编写程序,从键盘输入一个矩形的左下角和右上角的坐标,输出该矩形的中心点坐标值,再输入任意一个点的坐标,判断该点是否在矩形内。 分析:用xd、yd代表矩形的左下角坐标;用xu、yu代表矩形的右上角坐标;用xm、ym代表矩形的中点坐标;设计函数:int ptin(struct point p,struct rect r),用于判断输入的点p是否在矩形r的内部。 ?程序:example9_11.c 9.7 程 序 范 例 例12:改进例8-25的程序。采用结构,设计一个洗牌和发牌的程序,用H代表红桃,D代表方片,C代表梅花,S代表黑桃,用1~13代表每一种花色的面值。 分析:可用结构类型来表示扑克牌的花色和面值: struct card { char *face; /* 扑克牌的面值 */ char *suit; /* 扑克牌的花色 */ }; 设计函数:void shuffle(Card *)完成对扑克牌洗牌。 ?程序:example9_12.c 9.7 程 序 范 例 例13:修改例9-12,用位段结构成员表示一副牌,发牌时显示每张牌的颜色。 分析:因为牌的面值只有13种,牌的花色只有4种,牌的颜色只有2种,因此,可用一个位段结构来表示一副牌: struct bitCard{ unsigned face: 4; unsigned suit: 2; unsigned color: 1; }; face表示面值;suit表示花色;color表示颜色。 ?程序:example9_13.c 9.7 程 序 范 例 例14:编写程序,求解另1种变化的约瑟夫问题:由n个人围成一圈,对他们从1开始依次编号,现指定从第m个人开始报数,报到第s个数时,该人

您可能关注的文档

文档评论(0)

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

1亿VIP精品文档

相关文档