C语言程序设计_09结构体.ppt

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

链表的插入操作算法描述如下: 指针HEAD指向链表的头结点,P0指向待插入的结点,P1和P2一前一后指示插入点。 (1)最初P1=HEAD;。 (2)移动指针P2=P1,P1=P1-NEXT,直到找到插入点。 (3)插入结点P0-NEXT=P1,P2-NEXT=P0。 仍然以例9.7建立的有N名学生数据的单向链表为例,设已有的链表各结点是按学号由小到大顺序排列的。 用指针变量P0指向待插入的结点,最初P1=HEAD,找插入点的操作如下: 当P0-NUMP1-NUM且P1-NEXT!=NULL { P2=P1; P1=P1-NEXT; } 插入结点操作如下: IF P1==HEAD则 结点作为表头插入 ELSE IF P1-NEXT==NULL则 结点作为表尾插入 ELSE 插入在P2所指结点之后 3.链表的删除操作 从一个链表中删去一个结点,只要改变链接关系即可,即修改结点指针成员的值,如图9-9所示。 图9-9 删除结点操作 删除结点算法描述如下: 用指针P1指向待删结点,P2指向待删结点的前一个结点。 (1)P1 = HEAD,从第一个结点开始检查。 (2)当P1指向的结点不是满足删除条件的结点且没有到表尾时,P2 = P1,P1 = P1-NEXT(移动指针P1,继续查找)。 (3)如果找到了删除结点P1!=NULL,则要分两种情形: 如果P1 = = HEAD(删除的是头结点)则 HEAD=HEAD-NEXT; /*删除头结点*/ 否则 P2-NEXT=P1-NEXT; /*删除P1指向的结点*/ (4)FREE(PL),释放被删除结点的内存空间。 4.链表的输出操作 要依次输出链表中各结点的数据比较容易处理。首先要知道链表头结点的地址,也就是要知道HEAD的值,然后设一个指针变量P,先指向第一个结点,输出P所指的结点,然后使P后移一个结点,再输出。直到链表的尾结点。 5.链表的查找操作 链表的查找是指在已知链表中查找值为某指定值的结点。链表的查找过程是从链表的头指针所指的第一个结点出发,顺序查找。若发现有指定值的结点,以指向该结点的指针值为查找结果;如果查找至链表结尾,未发现指定值的结点,查找结果为NULL,表示链表中没有指定值的结点。为简单起见,以指定的学号作为查找结点的关键字。 9.7 结构体应用举例 【例9.8】用结构体类型描述复数,编一程序,计算并输出复数四则运算的结果,要求复数加、减、乘和除分别用4个函数实现。 【例9.9】设计一个洗牌和发牌的程序,用H代表红桃,D代表方片,C代表梅花,S代表黑桃,用1~13代表每一种花色的面值。 【例9.10】结构体数组排序。 【例9.11】链表的结点信息包括学生学号、成绩,结点定义如下: STRUCT PLIST { INT NO; FLOAT SCORE; STRUCT PLIST *NEXT; }; 设已经建立两个具有上述结构的链表,且两个链表都是按学号升序排列的,要求编写一个函数,将两个链表合并,仍按学号升序排列。 编写程序时要考虑以下几点: (1)函数应有两个链表指针形参P1、P2,它们指向各自的表头。 (2)最初新链表的头指针HEAD = NULL,新链表的当前结点指针P= NULL。 (3)产生新链表的头结点。 IF(P1-NOP2-NO) /*比较两个链表中当前结点的学号*/ {HEAD=P=P1;P1=P1-NEXT;} ELSE {HEAD=P=P2;P2=P2-NEXT;} (4)当两个链表的指针均没指向表尾,则选择两个链表中的结点并入到新链表。 IF(PL-NOP2-NO) 将P1指向的结点接到新链表的表尾:P-NEXT=P1; 并移动P和P1; ELSE 将P2指示的结点接到新链表的表尾:P-NEXT=P2; 并移动P和P2; (5)当某一个链表已到表尾,则另一个链表的剩余部分直接链接到新链表的表尾。 IF(P1!=NULL) P-NEXT=P1; ELSE P-NEXT=P2; 本 章 小 结 1.结构体是一种构造类型,它由若干成员组成。每一个成员既可以是一个基本数据类型也可以是一个构造类型。在使用结构体之前必须先进行定义。要定义一个结构体类型的变量,可以采取3种方法:先定义结构体类型,再定义变量;在定义类型的同时定义变量;直接定义结构体类型变量。 注意: (1)结构体是一个数据类型,只不过结构体类型是一种构造数据类型。只能对结构体变量赋值、存取或运算,而不能对结构体类型赋值、存取或运算。 (

文档评论(0)

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

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

版权声明书
用户编号:8133070117000003

1亿VIP精品文档

相关文档