第7章其他自定义数据类型_第1页
第7章其他自定义数据类型_第2页
第7章其他自定义数据类型_第3页
第7章其他自定义数据类型_第4页
第7章其他自定义数据类型_第5页
已阅读5页,还剩53页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、12022-3-162一种构造类型数据一种构造类型数据 结构体结构体由若干不同类型的数据项组成,由若干不同类型的数据项组成, 构成结构体的各个数据项称为构成结构体的各个数据项称为结构体成员结构体成员。 2022-3-163lstructstruct为关键字;为关键字;l结构体名结构体名是用户定义是用户定义的的类型标识类型标识。l 中是组成该结构体中是组成该结构体的的成员成员。成员的。成员的数据数据类型类型可以是可以是C语言所允语言所允许的任何数据类型许的任何数据类型。2022-3-1642022-3-165例如学生类型的定义:例如学生类型的定义:struct student char num8

2、; /* 学号是学号是字符数组字符数组类型类型 */ char name30; /* 姓名是姓名是字符数组字符数组类型类型 */ char sex; /* 性别是性别是字符型字符型 */ int age; /* 年龄是年龄是整型整型 */ char addr60; /* 住址是住址是字符数组字符数组类型类型 */ int score6; /* 成绩是成绩是整型数组整型数组类型类型 */ ;2022-3-166 结构体变量的各个成员在内存中占用连续存储结构体变量的各个成员在内存中占用连续存储区域,区域,结构体变量结构体变量所占内存所占内存结构体中结构体中每个成每个成员员所占用内存的所占用内存的长

3、度之和长度之和。2022-3-167 struct date int year,month,day; struct student char num8; char name30; char sex; birthday; /* 成员为结构体类型成员为结构体类型 */ char addr60; int score6; ;2022-3-1682022-3-1692022-3-1610 如果初值个数少于结构体成员个数,如果初值个数少于结构体成员个数,则将无初值对应的成员赋以则将无初值对应的成员赋以0值。值。 如果初值个数多于结构体成员个数,如果初值个数多于结构体成员个数,则编译出错。则编译出错。202

4、2-3-1611 元素的个数可以省略,根据赋初值时元素的个数可以省略,根据赋初值时结构体常量的个数确定数组元素的个数结构体常量的个数确定数组元素的个数 2022-3-16122022-3-16132022-3-16142022-3-1615a.birthday.yeara.birthday.montha.birthday.day 2022-3-16162022-3-16172022-3-16182022-3-1619p是指向是指向struct student结结构体变量的指针变量构体变量的指针变量 2022-3-1620“”是指向结构体成员是指向结构体成员运算符,优先级为一级运算符,优先级为一

5、级 p=&d.year2022-3-1621Enter today date(YYYY/MM/DD):2006/06/23Today:2006/6/232022-3-16222022-3-1623ppppp1 H 1.0082 He 4.00263 Li 6.9414 Be 9.012182022-3-16242022-3-1625p100130011001F2000H300030012022-3-1626head 1782 2008 3246 1085 5736图图7-2 动态单向链表示意图动态单向链表示意图C3246H1085A5736INULL1782 2008 struct n

6、odechar c; struct node *next; ;2022-3-1627 C语言提供了相关的存储管理库函数。这里语言提供了相关的存储管理库函数。这里仅介绍其中三个,它们的原型说明在仅介绍其中三个,它们的原型说明在“stdlib.h”头文件和头文件和“alloc.h”头文件中,使用头文件中,使用这三个函数时,应选择其中一个头文件包含到这三个函数时,应选择其中一个头文件包含到源程序中。源程序中。2022-3-1628将函数返回值转换将函数返回值转换成结构体指针成结构体指针 p- -n=5 p- -next=0nnext5NULLp2022-3-16292022-3-1630动态分配了动

7、态分配了10个存放整个存放整型数据的存储单元型数据的存储单元 2022-3-1631 实参必须是一个指向动态分配存储区实参必须是一个指向动态分配存储区的指针,它可以是任何类型的指针变量。的指针,它可以是任何类型的指针变量。2022-3-1632q 建立链表就是根据需要一个一个地开建立链表就是根据需要一个一个地开辟新结点,在结点中存放数据并建立结点辟新结点,在结点中存放数据并建立结点之间的链接关系。之间的链接关系。 头指针头指针h设为设为NULL读入一个学生姓名读入一个学生姓名 当姓名长度不为当姓名长度不为0 开辟新结点开辟新结点 p=NEW 数据送入新结点数据送入新结点 strcpy(p-na

8、me,name) gets(p-tel);p-next=NULL h=NULL T F h指向第一个指向第一个 连接新结点连接新结点 结点结点 h=p q-next=p q指向新的尾结点指向新的尾结点 q=p 读入一个学生姓名读入一个学生姓名图图7-3 建立单向链表建立单向链表NULLhppq 2022-3-16332022-3-16342022-3-16352022-3-1636 p指向第一个结点指向第一个结点 p=head 当当p不为不为NULL 输出结点数据输出结点数据 p指向下一个结点指向下一个结点: p=p- -next图图7-5 输出链表的输出链表的N-S图图headppppNUL

9、LNULL2022-3-16372022-3-1638 headNULLNULL第第i-1个结点个结点 第第i个结点个结点 第第i+1个结点个结点 2022-3-1639 headp2022-3-1640 headpp q2022-3-1641 headppp qq 2022-3-1642 p=head while(strcmp(x,p-name)!=0 & p-next!=NULLNULL) q指针跟随指针跟随p指针后移查找指针后移查找 (q=p;p=p-next;) strcmp(x,p-name)=0 T F p=head T F head=p-next q-next=p-nex

10、t 没找到没找到 free(p)图图7-9 删除链表中指定结点的删除链表中指定结点的N-S图图删除删除第一个第一个结点结点 删除中间删除中间结点或尾结点或尾结点结点 删除结点工删除结点工作分两步:作分两步:查找结点查找结点删除结点删除结点学生姓名学生姓名当姓名不同并且当姓名不同并且不是尾结点循环不是尾结点循环2022-3-1643查找结点查找结点 2022-3-16442022-3-1645 headNULLNULL第第i个结点个结点ppqqp0p新的第新的第i个结点个结点2022-3-1646 headpp02022-3-1647 headpqp02022-3-1648 headpp q p

11、0pq 2022-3-1649 head=NULL T F p=head head=p0 while(strcmp(x,p-name)!=0 & p-next!=NULLNULL) p0-next q指针跟随指针跟随p指针后移查找指针后移查找 (q=p;p=p-next;) =NULL NULL strcmp(x,p-name)=0 T F p=head T F p-next=p0 head=p0 q-next=p0 p0-next=NULLNULL p0-next=p图图7-11 在链表指定位置前插入结点的在链表指定位置前插入结点的N-S图图当姓名不同并且当姓名不同并且不是尾结点循环不是尾结点循环空表时空表时插入插入结点结点在表尾在表尾追加结点追加结点 插入结点工插入结点工作分两步:作分两步:查找插查找插入位置入位置连接连接新结点新结点在表头在表头插入结点插入结点 在表中间在表中间插入结点插入结点 2022-3-16502022-3-1651查找插

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论