版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、结构体指针与指针链表,所谓结构体指针就是指向结构体数据类型的指针,一个结构体变量的起始地址就是这个结构体变量的指针。同样,如果把结构体起始地址放入一个地址变量中,那么该指针(地址变量)就是指向该结构体的变量。需要注意的是结构体指针定义类型必须与要指向的结构体变量的类型相同。 例:用结构体指针对年龄在19岁以下(含19岁)同学的成绩增加10分。 #include struct student int num; char name20; char sex; int age; float score; ;,结构体指针与指针链表,struct student stu4=11301,Zhang Ping
2、,F,19,496.5, 11302,Wang Li,F,20,483, 11303,Liu Hong,M,19,503, 11304,Song Rui,M,19,471.5; main() struct student *ps; ps= ,用指针处理链表,链表是一种常见的重要的数据结构,它是动态地进行存储分配的一种结构。 用数组存放数据时,必须事先定义固定的长度(即元素个数)。比如,有的班级有100人,而有的班只有30人,如果要用同一个数组先后存放不同的班级的学生数据,则必须定义长度最大为100的数组。显然这将会浪费内存。 链表没有这种缺点,它根据需要开辟内存单元。下图表示最简单的一种链表(
3、单向链表)的结构:,用指针处理链表,链表有一个“头指针”变量,它存放一个地址,该地址指向一个元素。链表中每一个元素称为“结点”,每个结点包括两个部分:一为用户需要用的实际数据值,二为下一个结点的地址。即头指针指向第一个元素;第一个元素又指向第二个元素直到最后一个元素,该元素不再指向其他元素,它称为“表尾”,它的地址部分放一个“NULL”(表示空地址),链表至此结束。 这种链表的数据结构,必须利用指针变量才能实现。用结构体变量作为链表中的结点最合适。,用指针处理链表,#include #define NULL 0 /常量定义 struct student long num; float scor
4、e; struct student *next; ; main() struct student a,b,c,*head,*p; a.num=99101;a.score=89.5; b.num=99103;b.score=90; c.num=99107;c.score=85;,head= ,例:建立一个简单链表,它由3个学生数据的结点组成。输出各结点中的数据。,用指针处理链表,上例比较简单,所有结点都是在程序中定义的,不是临时开辟的,也不能用完后释放,这种链表称为“静态链表”。 链表结构是动态地分配存储的,即在需要时才开辟一个结点的存储单元。这种链表称为“动态链表”。 C语言编译系统的库函数提
5、供了动态开辟和释放存储单元的有关函数。使用这些函数要进行预处理 #include ,用指针处理链表,1.malloc函数 函数原型: void *malloc(unsigned int size); 作用:在内存的动态存储区中分配一个长度为size的连续空间。返回值是一个指向分配域起始地址的指针;如果未能成功执行,则返回空指针(NULL)。 2.calloc函数 函数原型: void *calloc(unsigned n, unsigned size); 作用:在内存的动态存储区中分配n个长度为size的连续空间。返回一个指向分配域起始地址的指针;如果分配不成功,返回NULL。 3.free函
6、数 函数原型: void free(void *p); 作用:释放由p指向的内存区,使这部分存储区能被其他变量使用。无返回值。,用指针处理链表,#include #include #define NULL 0 struct student long num; float score; struct student *next; ; main() struct student *head,*p1,*p2; int i,n; scanf(%d,head=(struct student *)malloc(sizeof(struct student); scanf(%ld%f,例:建立动态链表。,用指
7、针处理链表,p1=head; /输出各个结点的值 while(p1!=NULL) printf(%ld %5.1fn,p1-num,p1-score); p1=p1-next; ,动态删除、插入链表,例:删除动态链表head中p1指定的结点: main() struct student *p1,*p2; p2=head; while(p2-next-score!=22.6,if(p2!=NULL) p1=p2-next; p2-next=p1-next; free(p1); ,动态删除、插入链表,例:在动态链表的p2位置插入p1节点: 先将p2之后的节点连接到p1上:p1-next=p2-ne
8、xt;,再将p1连接到p2上:p2-next=p1;,共用体与枚举类型,联合体类型定义 所谓联合体数据类型是指将不同的数据项存放于同一段内存单元的一种构造数据类型。同结构体类型相似,在一个联合体内可以定义多种不同的数据类型;不同的是,在一个联合体类型的变量中,其所有成员共用同一块内存单元,因此,虽然每一个成员均可以被赋值,但只有最后一次赋进去的成员值能够保存下来,而先前赋进去的那些成员值均被后来的覆盖了。 定义一个联合体类型的一般形式为: union 联合体名 成员1 类型1; 成员2 类型2; 成员n 类型n; ,共用体与枚举类型,枚举类型 所谓枚举类型是指这种变量的值只能限于事前已经一一列举出来的值的范围。比如描述星期几的数据就只能在星期日、星期一到星期六之间选择。 用关键字enum定义枚举类型,如: enum weekdaysun,mon,tue,wed,thu,fri,sat; weekday是枚举类型名,可以用于定义变量,如: enum weekday week1,week2; 定义了两上枚举变量,它们只
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 新余市重点中学2026届初三下学期检测试题卷(一)语文试题含解析
- 周口市重点中学2026届初三第二学期期末质量检查英语试题含解析
- 昭通市重点中学2026年高级初三(卫星班)化学试题含解析
- 辽宁省大连市甘井子区达标名校2026年初三3月联考英语试题理试题含解析
- 2026年广州省惠阳市惠城区初三下学期第一次大检测试题英语试题含解析
- 跨部门协作流程规范化工具包
- 企业知识管理库建设及维护标准
- 供应商资质审核未通过回复函(3篇)
- 海外学习安全承诺书范文4篇
- 化学品泄漏现场隔离与疏散预案
- 山东德州2010-2022年中考满分作文63篇
- 外派员工绩效考核管理制度范例
- 【装饰装修】技术部分(投标方案)
- 机械加工产品溯源方案(3篇)
- 江苏省苏锡常镇2025届高三下学期一模考试英语试题(解析版)
- 人寿保险面试题及答案
- 《无人机组装与调试》高职无人机课程全套教学课件
- DB34∕T 4343-2022 区域自动气象站观测数据无线传输技术规范
- 广西机场管理集团有限责任公司招聘考试真题2024
- 应急管理局应急物资储备项目方案投标文件(技术方案)
- 2025至2030微通道换热器行业产业运行态势及投资规划深度研究报告
评论
0/150
提交评论