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

上传人:本田雅阁 文档编号:3435715 上传时间:2019-08-25 格式:PPT 页数:28 大小:341.54KB
返回 下载 相关 举报
第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; ;,一个结构体类型数据所占用的存储空间等于存储各个成员所需空间的总

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

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

4、dent s; struct student *p; s.num、(*p).num、p-num三者等价 注意*、. 、-、+、-运算符优先级 假设成员num的初值为1 ,则表达式 p-num 、 p-num+ 、 +p-num的值分别为:,1、1、2,结构体数组,定义:与定义结构体变量方法相似 初始化:定义数组=初值列表; P263 例:统计选票 #include struct person char name20; int count; leader3=“A”,0, “B”,0, “C”,0;,leader2,leader1,leader0,结构体数组,main() int i,j;char

5、 leader_name20; for(i=1;i=10;i+) scanf(“%s”,leader_name); for(j=0;j3;j+) if(strcmp(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

6、=leader;,leader2,leader1,leader0,不可以p=,结构体与函数,使用结构体变量的成员作参数,用法同普通变量 使用结构体变量作参数,空间开销大,不方便,较少使用 使用指向结构体变量的指针作参数,空间开销小,方便,链表,数组 存放一组数据(元素) 连续存放 固定大小 静态分配内存 通过下标访问元素,链表 存放一组数据(结点) 不连续存放 可变大小 动态分配内存 通过指针访问结点,结点,10,数据域,指针域,尾结点,头指针,简单链表,定义链表结束标志 #define NULL 0,定义结点数据结构 struct student long num; float score;

7、 struct student *next; ;,main() struct student a,b; struct student *head,*p; a.num=1001;a.score=88; b.num=1002;b.score=78; head=,p=head; do printf(“%ld%fn”, p-num, p-score); p=p-next; while(p!=NULL);,建立链表,输出链表,&b,NULL,单向链表的访问,例8-13:输出链表内容 P277 void print_link(struct student *head) struct student *p;

8、 p=head; while(p!=NULL) printf(“%d,%6.1fn”,p-num,p-score); p=p-next; ,单向链表的访问,例8-14:统计链表长度 P277 int len_link(struct student *head) int n=0; struct student *p; p=head; while(p!=NULL) n+; p=p-next; return(n); ,动态链表,能够根据需要临时开辟结点的存储空间 对于不再使用的结点,可以释放其所占据的存储空间 基本操作 建立、输出、删除、插入,动态存储空间的建立,malloc函数 原型:void *

9、malloc(unsigned int size); 功能:在内存的动态存储区中分配一个长度为size的连续空间 返回值:成功执行则返回一个指向该区域起始地址的指针,否则返回一个空指针NULL calloc函数 原型:void *calloc(unsigned n,unsigned size); 功能:在内存的动态存储区中分配n个长度为size的连续空间 返回值:成功执行则返回一个指向该区域起始地址的指针,否则返回一个空指针NULL,动态存储空间的释放,free函数 原型:void free(void *p); 功能:释放由p所指向的内存区,使这部分内存区能被其它变量使用 返回值:无 注意 使

10、用以上三个函数时,需要包含头文件#include或#include 分配空间的大小常由长度运算符sizeof(类型名)计算 指向所分配空间的指针类型常用类型转换运算符(基类型 *)转换 如:(struct student *)malloc(sizeof(struct student);,动态链表的建立,建立过程示意图,NULL,建立第1个结点,确定第1个结点的数据域内容,使头指针指向第1个结点,建立第2个结点,确定第1个结点的指针域内容,依次建立其它结点,将尾结点的指针域设为NULL,p1:指向新建结点,p2:指向当前的尾结点,p2-next=p1,动态链表的建立,例8-15:建立有n个stu

11、dent类型结点的链表,n的值从键盘输入,再输出链表。 P280 /* 定义代表结构体长度的宏 */ #define LEN sizeof(struct student) #include #include struct student /*定义结构体类型*/ int num; float score; struct student *next; ;,动态链表的建立,void main() int n; struct student *head; struct student *create(int n); void print_link(struct student *head); prin

12、tf(“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,删除尾结点,p1,p2,p2,head=p1-next;,或p2-next=p1-next;,p2-next=p1-next;,p2-next=NULL;,删除中间结点,链

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

14、ad, 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; union 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备18001539号-1