【教学课件】第九章结构体与共用体.ppt
《【教学课件】第九章结构体与共用体.ppt》由会员分享,可在线阅读,更多相关《【教学课件】第九章结构体与共用体.ppt(57页珍藏版)》请在三一办公上搜索。
1、结构体是C语言中的另外一种构造型数据,它 是由不同类型的数据项组成的复合类型。结构体 是建造动态数据结构非常有用的工具。如,由结构体类型的数据所构成的链表等。本章将介绍结构体类型的定义、引用和结构 体数组、结构体指针以及由结构体所构成的链表,第9章 结构体与链表,学号 姓名 性别 年龄 成绩 电 话,int,char,float,struct stu int num;char name20;int age;float score;long int tele;a;,结构体,long int,一、结构体类型变量的定义,struct 类型名 成员 表列;变量名;,格式:,struct stu int
2、 num;char name10;float score;a;,结构体类型所占内存的字节数=所有成员的字节总和,16,9.1 结构体类型的基本操作,num name score,2000,2002,200C,a,二、结构体类型变量的引用,变量名.成员名,struct stu int num;char name10;float score;a;,scanf(“%d,%s,%f”,printf(“%d,%s,%fn”,a.num,a.name,a.score);,三、结构体变量的初始化,struct stu int num;char name10;float score;a=101,“王一”,68
3、.5;,num name score,一个结构体变量中可以存放一组数据(如一个学生的学号、姓名、成绩等数据)。若要处理一批这样的数据时,就要用到结构体数组。,9.2 结构体数组,a0,a0.num,struct stu int num;char name10;float score;a3;,a0.name,a0.score,a1,a2,a0,struct stu int num;char name20;int age;float score;long int tele;a3,a1,a2,=10010,“王一”,20,98.5,8802766,10011,“李雨”,19,67.8,8802765
4、,10012,“欧杨”,20,88.5,8802769,;,a0,a1,a2,for(i=0;i3;i+)scanf(“%d,%s,%d,%f%ld”,请设计一个统计选票的程序。现设有三个候选人的名单,请分别统计出他们各得票的多少。,候选人姓名,票数,秋 雨,春 风,冬 雪,0,0,0,EXAMPLE9-1:,struct person char name20;int sum;a3=“qiu”,0,“chun”,0,“dong”,0;,main()int i,j;char name20;for(i=1;i=10;i+),scanf(“%s”,name);,for(j=0;j3;j+),if(s
5、trcmp(name,aj.name)=0),aj.sum+;,for(i=0;i3;i+)printf(“%s,%dn”,ai.name,ai.sum);,a0,a1,a2,请将5名学生的数据写入到stu数组中。每条数据包括有num、name、score。要求:请输出score不及格的学生并统计出不及格的人数。,EXERCISES9-1:,一个结构体变量的指针就是该变量所占据内存段的起始地址可以设一个指针变量,用来指向一个结构体变量,此时该指针变量的值就是该结构体变量的起始地址。指针变量也可以用来指向结构体数组中的元素。,一、指向结构体变量的指针,struct stu int num;cha
6、r name10;float score;a=101,“Li”,68.5;,p=,printf(“%d,%s,%f n”,(*p).num,(*p).name,(*p).score);,p-num,p-name,p-score);,struct stu*p;,a,*p,一、指向结构体变量的指针,p=a;,二、指向结构体数组的指针,a0,a1,a2,printf(“%d,%s,%f n”,(*p).num,(*p).name,(*p).score);,struct stu*p;,for(;pa+3;p+),struct stu int num;char name10;float score;a3
7、=101,“Li”,68.5,102,“Wang”,67.8,103,“Ma”,88.5;,*p,*p,*p,链表是指将若干个数据项按一定的原则连接起来的表。链表中每一个数据称为节点。链表连接的原则是:前一个节点指向下一个节点;而且只有通过前一个节点才能找到下一个节点。链表是一种常见的重要的数据结构。利用它可以实现动态地进行存储分配。,9.3 链表,1249,*h,1094,1021,头指针,单向链表结构,空地址,1094,1021,NULL,struct stu int num;float score;a,b,c;,一、简单链表的建立与输出,struct stu*next;,struct s
8、tu*h;,a.num=101;,a,b,c,101,a.score=98.5;,98.5,b.num=102;,b.score=67.8;,102,67.8,c.num=103;,c.score=88.5;,103,88.5,struct stu int num;float score;a,b,c;,struct stu*next;,struct stu*h;,a.num=101;,a,b,c,101,a.score=98.5;,98.5,b.num=102;,b.score=67.8;,102,67.8,c.num=103;,c.score=88.5;,103,88.5,h=,*h,a.n
9、ext=,b.next=,c.next=NULL;,NULL,struct stu*p;,a,b,c,101,98.5,102,67.8,103,88.5,*h,NULL,*p,p=h;,for(;),p=(*p).next,printf(“%d,%fn”,(*p).num,(*p).score);,p!=NULL;,*p,*p,二、动态链表的建立与输出,所谓动态链表的建立是指在程序执行过程中从无到有地建立一个链表,即一个一个地开辟节点和输入各节点数据,并建立起前后相链的关系。,动态分配存储空间函数,int*p1;p1=malloc(2);,p1=malloc(int);,p1=malloc(
10、float);,malloc(),*p1,p1=(struct*)malloc(sizeof(struct stu);,struct stu int num;float score;struct stu*next;*p1;,p1=(float*)malloc(sizeof(float);,为强制类型转换。即将由malloc 函数得到的地址值转换成一个浮点类型存储单元的地址值。,为字节数运算符,在此是用来说明该指针变量将要开辟的是非字符类型的动态内存。,*p1,*h,*p1,struct stu int num;float score;struct stu*next;*h,*p1,*p2;,p1
11、=(struct stu*)malloc(sizeof(struct stu);,h=p1;,p1=(struct stu*)malloc(sizeof(struct stu);,*p1,h.next=p1;,p2=p1;,*p2,p1=(struct stu*)malloc(sizeof(struct stu);,*p1,p2.next=p1;,p2=p1;,*p2,*h,*p1,struct stu int num;float score;struct stu*next;*h,*p1,*p2;,NULL,main()int i;,p2=p1=(struct stu*)malloc(size
12、of(struct stu);,p2=p1;,*p2,*p2,for(i=1;i2;i+),p2-next=p1;,scanf(“%d,%fn”,h=p1;,scanf(“%d,%fn”,p2-next=NULL;,*h,*p1,struct stu int num;float score;struct stu*next;*h,*p1,*p2;,NULL,main(),*p2,p1=h;,printf(“%d,%f n”,p1-num,p1-score);,p1=p1-next;,*p1,while(p!=NULL),*h,NULL,三、动态链表的插入操作,动态链表的插入操作是指将一个节点插入
13、到一个已有的链表中。,*p1,struct stu int num;float score;struct stu*next;*h,*p1,*p2;,NULL,main(),*p2,scanf(“%d,%f”,p2=p1;,p0=,struct stu*p0,x;,x,*p2,*p0,while(p0-scorep1-score),p1=p1-next;,p2-next=p0;,*p0-next=p1;,*p1,*p2,*p1,*h,若有以下定义:,struct link int data;struct link*next;a,b,c,*p,*q;,a,b,c,能将节点c插入到上述链表结构中的a
14、与b之间,以形成新的链表结构的语句组是:,A)a.next=c;c.next=b;B)p.next=q;q.next=p.next;C)p-.next=,EXERCISES9-2:,*p,*q,若已建立下面的链表结构,指针 p、s 分别指向图中所示的 节点,则不能将 s所指的节点插入到链表末尾的语句组是:,A)s-next=NULL;p=p-next;p-next=s;B)p=p-next;s-next=p-next;p-next=s;C)p=p-next;s-next=p;p-next=s;D)p=(*p).next;(*s).next=(*p).next;(*p).next=s;,*s,E
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 教学课件 教学 课件 第九 结构 共用
链接地址:https://www.31ppt.com/p-5661499.html