第8章结构体共用体与枚举类型.ppt

上传人:sccc 文档编号:5667603 上传时间:2023-08-07 格式:PPT 页数:28 大小:341.51KB
返回 下载 相关 举报
第8章结构体共用体与枚举类型.ppt_第1页
第1页 / 共28页
第8章结构体共用体与枚举类型.ppt_第2页
第2页 / 共28页
第8章结构体共用体与枚举类型.ppt_第3页
第3页 / 共28页
第8章结构体共用体与枚举类型.ppt_第4页
第4页 / 共28页
第8章结构体共用体与枚举类型.ppt_第5页
第5页 / 共28页
点击查看更多>>
资源描述

《第8章结构体共用体与枚举类型.ppt》由会员分享,可在线阅读,更多相关《第8章结构体共用体与枚举类型.ppt(28页珍藏版)》请在三一办公上搜索。

1、,第8章 结构体,共用体与枚举类型,教学内容掌握结构体类型的使用方法掌握链表的基本操作了解共用体类型、枚举类型和自定义类型的使用方法教学重点结构体变量的基本用法链表的建立、输出、删除和插入操作教学难点用指针处理链表的基本方法,结构体类型,结构体(struct)是一种将不同类型数据组合在一起的数据类型声明结构体类型struct 结构体名成员列表;,struct student int num;char name20;char sex;int age;float score;char addr30;,一个结构体类型数据所占用的存储空间等于存储各个成员所需空间的总和,即sizeof(结构体名),结构

2、体类型变量,定义先声明类型再定义变量struct student student1,student2;在声明类型的同时定义变量struct student student1,student2;直接定义变量struct student1,student2;说明P255成员也可以是另一个结构体成员名可与程序中的变量名相同,struct dateint month;int day;int year;struct personchar name20;char sex;struct date birthday;,name,sex,birthday,month,day,year,person,结构体类型变

3、量,引用除2个相同类型结构体变量可相互赋值外,不能将结构体变量作为一个整体进行运算,只能对最低级的成员进行运算引用成员的形式结构体变量名.成员名如:stu1.age+或person1.birthday.month赋值定义时赋初值P259同类型结构体变量间的整体赋值例8-2P258输入结构体变量 P257scanf(“%d%s%c%d%f%s”,指向结构体的指针,指向结构体变量的指针的值就是该变量所占据内存空间的起始地址例:struct student int num;struct student s;struct student*p;s.num、(*p).num、p-num三者等价注意*、.、

4、-、+、-运算符优先级假设成员num的初值为1,则表达式 p-num、p-num+、+p-num的值分别为:,1、1、2,结构体数组,定义:与定义结构体变量方法相似初始化:定义数组=初值列表;P263例:统计选票#includestruct personchar name20;int count;leader3=“A”,0,“B”,0,“C”,0;,leader2,leader1,leader0,结构体数组,main()int i,j;char leader_name20;for(i=1;i=10;i+)scanf(“%s”,leader_name);for(j=0;j3;j+)if(strc

5、mp(leader_name,leaderj.name)=0)leaderj.count+;printf(“n”);for(i=0;i3;i+)printf(“%5s:%dn”,leaderi.name,leaderI.count);,结构体数组与指针,struct person char name20;int count;leader3=“A”,0,“B”,0,“C”,0;struct person*p;p=leader;,leader2,leader1,leader0,不可以p=,结构体与函数,使用结构体变量的成员作参数,用法同普通变量使用结构体变量作参数,空间开销大,不方便,较少使用使用

6、指向结构体变量的指针作参数,空间开销小,方便,链表,数组存放一组数据(元素)连续存放固定大小静态分配内存通过下标访问元素,链表存放一组数据(结点)不连续存放可变大小动态分配内存通过指针访问结点,结点,10,数据域,指针域,尾结点,头指针,简单链表,定义链表结束标志#define NULL 0,定义结点数据结构struct student long num;float score;struct student*next;,main()struct student a,b;struct student*head,*p;a.num=1001;a.score=88;b.num=1002;b.score

7、=78;head=,p=head;doprintf(“%ld%fn”,p-num,p-score);p=p-next;while(p!=NULL);,建立链表,输出链表,&b,NULL,单向链表的访问,例8-13:输出链表内容P277void print_link(struct student*head)struct student*p;p=head;while(p!=NULL)printf(“%d,%6.1fn”,p-num,p-score);p=p-next;,单向链表的访问,例8-14:统计链表长度P277int len_link(struct student*head)int n=0;

8、struct student*p;p=head;while(p!=NULL)n+;p=p-next;return(n);,动态链表,能够根据需要临时开辟结点的存储空间对于不再使用的结点,可以释放其所占据的存储空间基本操作建立、输出、删除、插入,动态存储空间的建立,malloc函数原型:void*malloc(unsigned int size);功能:在内存的动态存储区中分配一个长度为size的连续空间返回值:成功执行则返回一个指向该区域起始地址的指针,否则返回一个空指针NULLcalloc函数原型:void*calloc(unsigned n,unsigned size);功能:在内存的动态

9、存储区中分配n个长度为size的连续空间返回值:成功执行则返回一个指向该区域起始地址的指针,否则返回一个空指针NULL,动态存储空间的释放,free函数原型:void free(void*p);功能:释放由p所指向的内存区,使这部分内存区能被其它变量使用返回值:无注意使用以上三个函数时,需要包含头文件#include或#include 分配空间的大小常由长度运算符sizeof(类型名)计算指向所分配空间的指针类型常用类型转换运算符(基类型*)转换如:(struct student*)malloc(sizeof(struct student);,动态链表的建立,建立过程示意图,NULL,建立第1

10、个结点,确定第1个结点的数据域内容,使头指针指向第1个结点,建立第2个结点,确定第1个结点的指针域内容,依次建立其它结点,将尾结点的指针域设为NULL,p1:指向新建结点,p2:指向当前的尾结点,p2-next=p1,动态链表的建立,例8-15:建立有n个student类型结点的链表,n的值从键盘输入,再输出链表。P280/*定义代表结构体长度的宏*/#define LEN sizeof(struct student)#include#include struct student/*定义结构体类型*/int num;float score;struct student*next;,动态链表的建

11、立,void main()int n;struct student*head;struct student*create(int n);void print_link(struct student*head);printf(please input nn);scanf(%d,动态链表的建立,struct student*create(int n)int i;struct student*head=NULL,*p1,*p2;head=p2=(struct student*)malloc(LEN);scanf(%d%f,链表的删除操作,A,B,C,D,E,NULL,head,p1,删除头结点,p1

12、,删除尾结点,p1,p2,p2,head=p1-next;,或p2-next=p1-next;,p2-next=p1-next;,p2-next=NULL;,删除中间结点,链表的删除操作,struct student*delete(struct student*head,int num)struct student*p1,*p2;if(head=NULL)printf(list null!n);elsep1=head;while(p1!=NULL,链表的插入操作,X,插入头结点,head=p0;,p0-next=p1;,插入尾结点,p1-next=p0;,p0-next=NULL;,插入中间结

13、点,p2-next=p0;,p0-next=p1;,链表的插入操作,struct student*insert(struct student*head,struct student*stud)struct student*p0,*p1,*p2;p1=head;p0=stud;if(head=NULL)head=p0;p0-next=NULL;else while(p0-score p1-score),共用体,含义不同类型的变量共同使用同一内存区域特点共用体变量所占内存长度为最长成员的长度同一时刻此内存区域只能存放其中一种变量定义union data定义共用体类型int i;char ch;un

14、ion data a,b,c定义共用体类型变量引用如:a.i,枚举,功能用于处理变量的值只局限于所列举出来的值的范围的情况定义枚举类型如:enum sex(female,male);定义枚举类型变量enum sex xb;引用枚举类型变量xb=male;注意枚举元素为常量,第1个元素值为0,自定义类型,含义:不是定义新的数据类型,而是用新的类型名代替已有类型名方法:,先按定义变量的方法写出定义体,char str10;,将变量名换成新类型名,NAME,在最前面加上typedef,typedef,可以使用新类型名定义变量,NAME sn;,等价于char sn10;,实验十一,实验指导书P53:1实验指导书P53:4,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号