结构体与链表_第1页
结构体与链表_第2页
结构体与链表_第3页
结构体与链表_第4页
结构体与链表_第5页
已阅读5页,还剩21页未读 继续免费阅读

下载本文档

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

文档简介

1、 结构体结构体是是C语言中的另外一种构造型数据语言中的另外一种构造型数据,它它是由是由不同类型的数据项不同类型的数据项组成的复合类型。结构体组成的复合类型。结构体是建造动态数据结构非常有用的工具。如是建造动态数据结构非常有用的工具。如, 由结由结 构体类型的数据所构成的链表等。构体类型的数据所构成的链表等。 下面将介绍结构体类型的定义、引用和结构下面将介绍结构体类型的定义、引用和结构体数组、结构体指针以及由结构体所构成的链表体数组、结构体指针以及由结构体所构成的链表 1 结构体类型的基本操作结构体类型的基本操作 一、概述一、概述 二、结构体类型变量的定义二、结构体类型变量的定义 2 结构体数组

2、结构体数组 一、结构体数组的定义一、结构体数组的定义 二、结构体数组的初始化二、结构体数组的初始化三、结构体类型变量的引用三、结构体类型变量的引用 四、结构体类型变量的初始化四、结构体类型变量的初始化 三、结构体数组的引用三、结构体数组的引用 4 链表链表 一、链表概述一、链表概述 二、建立链表二、建立链表三、输出链表三、输出链表 四、对链表的插入操作四、对链表的插入操作 五、对链表的删除操作五、对链表的删除操作一、指向结构体变量的指针一、指向结构体变量的指针 3 指向结构体类型数据的指针指向结构体类型数据的指针 二、指向结构体数组的指针二、指向结构体数组的指针 三、用指向结构体的指针作为函数

3、参数三、用指向结构体的指针作为函数参数10010王一王一女女1968.58802766 学 号 姓 名 性 别 年 龄 成 绩 电 话 1 结构体类型的基本操作结构体类型的基本操作 关于C语言中的数据类型,目前我们已经掌握了基本类型(int、float、char、double), 并由这些基本类型组合而成的构造型(数组) 。 但在有些情况下还需要另一种构造型数据类型。如用于表示一个学生的自然状况的数据为: intcharfloat struct stu int num; char name20; int age; float score; long int tele; a ; 结构体long

4、int一、结构体类型变量的定义一、结构体类型变量的定义 struct 类型名类型名 成员成员 表列表列 变量名变量名; 格式格式: struct stu int num; char name20; int age; float score; long int tele; a ; 结构体类型所占内存的结构体类型所占内存的字节数字节数 = 所有成员的所有成员的字节总和字节总和32 变量名变量名 . 成员名成员名 格式格式: struct stu int num; char name20; int age; float score; long int tele ; a ; a.num=10010;

5、=“王一王一”; a.age=19; a.score=68.5; a.tele=8802766;三、结构体变量的初始化三、结构体变量的初始化 struct stu int num; char name20; int age; float score; long int tele ; a=10010, “王一王一”, 19, 68.5, 8802766 ;printf(“%d, %s, %d, %f, %ldn”, a.num, , a.age, a.score, a.tele) ; 一个结构体变量中可以存放一组数据一个结构体变量中可以存放一组数据( (如一个学生的学如一

6、个学生的学号、姓名、成绩等数据号、姓名、成绩等数据) )。若要处理一批这样的数据时,就。若要处理一批这样的数据时,就要用到结构体数组。要用到结构体数组。 struct stu int num; char name20; int age; float score; long int tele ; a3;a0 a1 a2 2 结构体数组结构体数组 struct stu int num; char name20; int age; float score; long int tele ; a3 10010王一王一2098.5 8802766a0 10011李雨李雨1967.8 8802765a1 1

7、0012欧杨欧杨2088.5 8802769a2 = 10010, “王一王一”, 20, 98.5, 8802766 , 10011, “李雨李雨”, 19, 67.8, 8802765 , 10012, “欧杨欧杨”, 20, 88.5, 8802769 , ; struct stu int num; char name20; int age; float score; long int tele ; a3; 10010王一王一1968.5 8802766a0 10011李雨李雨1977.8 8802765a1 10012欧杨欧杨2088.5 8802769a2 for(i=0;i3;i+

8、) scanf(“%d %s %d %f %ld”, ai.num, , ai.age, ai.score, ai.tele); ; 例子:例子:请设计一个统计选票的程序。 现设有三个候选人的名单,请分别统计出 他们各得票的多少。 候选人姓名 票数 秋 雨 春 风 冬 雪0 0 0 main() int i,j; char ch20; for(i=1;i=10;i+) scanf( “ %s ”, ch) ; for(j=0;j3;j+) if(strcmp(ch,) = = 0) aj.sum+; for(i=0;i num, p- name, p- score

9、); struct stu int num; char name10; float score ; a3= 10010, “王一王一”,68.5 , 10011, “李雨李雨”,77.8 , 10012, “欧杨欧杨”,88.5 ,p=a;10011李雨李雨77.8二、指向结构体数组的指针 10010王一王一68.510012欧杨欧杨88.5 a0 a1 a2 for(;pa+3;p+) printf(“%d,%s,%f n”, (*p).num, (*p).name, (*p).score); p *p ;A1094 1249 1249 head 4 用指针处理链表用指针处理链表 一、链表概

10、述 链表是指将若干个数据项按一定的原则连接起来的表。链表中每一个数据称为节点。链表连接的原则是: 前一个节点指向下一个节点;而且只有通过前一个节点才能找到下一个节点。 链表是一种常见的重要的数据结构。利用它可以实现动态地进行存储分配。 B1021CNull 1094 1021 头指针 - 单向链表结构空地址 a struct stu int num; float score ; a,b,c;main() a.num=101; a.score=68.5; b.num=102; b.score=77.8; c.num=103; c.score=88.5; b c h p 101 68.5102 7

11、7.8103 88.5h=&a;a.next=&b;b.next=&c;c.next=NULL;NULL二、简单链表的建立与输出 struct stu *next ; struct stu *h; 101 68.5 a b c h p=h;for(; ) printf(“%d,%f n”, (*p).num, (*p).score);p=(*p).next p!= NULL; struct stu *p; p 102 77.8 103 88.7NULL 三、动态链表的建立与输出 所谓动态链表的建立是指在程序执行过程中从无到有地建立一个链表,即一个一个地开辟节点和输入各节

12、点数据,并建立起前后相链的关系。1、动态分配存储空间函数例如例如: : int *p1 ; p1=malloc(2); p1 p1=malloc(int); 07B6 07B7 p1=malloc(float); 07B8 07B9 p1=(float *)malloc(20*sizeof(float); p1=(struct *)malloc(sizeof(struct stu);struct stu int num; float score; struct stu *next; *p1; p1=(float *) malloc (sizeof (float) ) ;为强制类型转换。即将由m

13、alloc 函数得到的地址值转换成一个浮点类型存储单元的地址值为字节数运算符,在此是用来说明该指针变量将要开辟的是非字符类型的动态内存。 p1 p1=(struct stu *)malloc(sizeof(struct stu);struct stu int num; float score; struct stu *next; *p1 p1 , *p2, *h; h=p1; h p1=(struct stu *)malloc(sizeof(struct stu); h.next=p1; p2 p2=p1; p1=(struct stu *)malloc(sizeof(struct stu);

14、p2.next=p1; p2=p1; p1=NULL; NULL 10010 68.5 10012 77.8 1001388.5 NULL struct stu int num; float score; struct stu *next; *p1, *p2, *h; h 10011 98.0 int n=0; p1=(struct stu *)malloc(sizeof(struct stu); p2=p1; h=p1; scanf(“%d,%fn”, (*p1).num,(*p1).score); p1 p2 n=n+1; p1=(struct stu *)malloc(sizeof(struct stu); scanf(“%d,%fn”, (*p1).num,(*p1).score); while(n(*p1).score) (*p2).next=p0; p2=p1; p1=p1.next; (*p0).next=p1; p1 p2 h p0 问题:问题:若有以下定义,若有以下定义,

温馨提示

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

评论

0/150

提交评论