c语言电子教案结构指针11

上传人:痛*** 文档编号:243997976 上传时间:2024-10-02 格式:PPT 页数:41 大小:412KB
返回 下载 相关 举报
c语言电子教案结构指针11_第1页
第1页 / 共41页
c语言电子教案结构指针11_第2页
第2页 / 共41页
c语言电子教案结构指针11_第3页
第3页 / 共41页
点击查看更多>>
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,UNIX C,编程,yyyy-M-,P,age *,第,11,章 结构体与共用体,知识点:,结构体、共用体、枚举类型的定义、引用,用,typedef,定义类型,结构体变量、数组、指针的使用,利用结构体与指针处理链表,重点:,结构体、共用体的定义、引用,结构体变量、数组、指针的使用,利用结构体与指针处理链表,难点:,利用结构体与指针处理链表,结构体(,struct,)是一种构造数据类型(由基本数据类型派生的),可以将一些不同的数据类型组合在一起使用,是一种自定义的数据类型,11.1,结构体,结构体类型定义,struct,结构体名,数据类型,成员名,1;,数据类型,成员名,2;,数据类型 成员名,n;,;,11.1,结构体,struct,是,关键字,不能省略,合法标识符可省,成员类型可以是基本型或构造型,注意不能忽略,;,例:,struct,student,int,num;,char,name20;,char,sex;,int,age;,float,score;,char,addr30;,;,11.1,结构体,结构体类型定义描述结构的组织形式,不分配内存,结构体变量的定义,声明结构体类型后,定义变量,struct,结构体名,类型标识符 成员名,;,类型,标识符 成员名,;,.,;,struct,结构体名,变量名表列,;,11.1,结构体,struct,student,int,num;,char name20;,char sex;,int,age;,float score;,char addr30;,;,struct,student stu1,stu2;,声明类型的同时定义变量,struct,结构体名,类型,标识符 成员名,;,类型,标识符 成员名,;,.,变量名表列,;,11.1,结构体,struct,student,int,num;,char name20;,char sex;,int,age;,float score;,char addr30;,stu1,stu2;,直接定义结构体类型变量,struct,类型标识符 成员名,;,类型标识符 成员名,;,.,变量名表列,;,11.1,结构体,struct,int,num;,char name20;,char sex;,int,age;,float score;,char addr30;,stu1,stu2;,这种方式没有定义结构类型,,以后无法利用这一结构类型来定义其他的变量。实际应用不采用,11.1,结构体,2Byte,20Byte,1Byte,2Byte,4Byte,30Byte,num,name20,sex,age,score,addr30,每个结构变量均占连续的,59Byte,结构体的嵌套,结构体的成员也可以是结构体,11.1,结构体,例,struct,date,int,month;,int,day;,int,year;,;,struct,student,int,num;,char name20;,struct,date birth;,stu,;,num,name20,birth,month,day,year,也可,struct,student,int,num;,char name20;,struct,date,int,month;,int,day;,int,year;,birth;,stu,;,结构体变量的引用,一个结构体变量由若干个成员组成。,结构体变量的引用是通过引用其成员的形式来实现的,结构变量名,.,结构成员名,stu1.score,stu2.name,每个结构体成员都可当做一个变量来使用,结构体变量的成员使用方法与普通内存变量一样。可以对其赋值、参与运算或作为函数的参数。,stu1.score=60;,scanf(%f,stu2=stu1;,printf(“stu2.name=%sn”,stu2.name);,stu.birth.day,=20;,11.1,结构体,结构体变量的初始化,在定义结构体类型的同时定义结构体变量,并初始化,11.1,结构体,例,struct,student,int,num;,char name20;,char sex;,int,age;,float score;,char addr30;,stu1=1,Mike,M,20,89,52,Xuefu,Road;,先定义结构体类型,再定义结构体变量并初始化,11.1,结构体,例,struct,student,int,num;,char name20;,char sex;,int,age;,float score;,char addr30;,;,struct,student stu1=1,Mike,M,20,89,52,Xuefu,Road;,struct,student stru2=2,Ros,F,19,90,52,Xuefu,Road;,结构体数组,数组的每个元素都是结构体类型的数据,定义结构体数组(与定义结构体变量一样,有三种形式),11.1,结构体,例,struct,student,int,num;,char name20;,char sex;,int,age;,float score;,char addr30;,;,struct,student stu3;,num,name20,sex,age,score,addr30,stu0,stu1,stu2,177,Byte,结构体数组的初始化,11.1,结构体,例,struct,student,int,num;,char name20;,char sex;,int,age;,float score;,char addr30;,;,struct,student stu3=1,Mike,M,18,87.5,103 Beijing Road,2,John,M,19,99,130 Shanghai Road,3,Rose,F,20,78.5,10,Zhongshan,Road;,例 对候选人得票的统计程序。设有,3,个候选人,每次输入一个得票的候选人的名字,要求最后输出各人得票结果。,指向结构体变量的指针,定义形式,struct,结构体名 *结构体指针,名;,11.1,结构体,例,struct,student,int,num;,char name20;,char sex;,int,age;,float score;,char addr30;,;,struct,student s,*p;,p=,p,num,name20,sex,age,score,addr20,s,p-num,p-name,p-sex,p-age,p-score,p-,addr,引用成员,(*,p).num,(*,p).name,(*,p).sex,(*,p).age,(*,p).score,(*,p).addr,引用成员,s.num,s.name,s.sex,s.age,s.score,s.addr,引用成员,指向结构体数组的指针,11.1,结构体,num,name20,sex,age,score,addr30,stu0,stu1,stu2,p,stu,p+1,p+2,printf(%5d%-20s%2c%4dn,p-num,p-name,p-sex,p-age);,用结构体变量作函数参数,用结构体变量的成员作参数,与基本类型变量作为函数实参用法相同,,传值方式,用结构体变量作参数,形参与实参都定义为同类型结构体变量,实参把结构体变量的成员传递给形参对应的成员,是,传值方式,,多值传递,例:有一个结构体变量,stu,,内含学生学号、姓名和,3,门课的成绩。要求在,main,函数中赋以值,在另一函数,print,中将它们打印输出。今用结构体变量作函数参数。,11.1,结构体,用指向结构体的指针作为函数参数,结构体指针做函数参数,,传地址,11.1,结构体,结构体数组作函数参数,例:,打印,2,名学生的,3,门成绩,链表是一种常见的数据结构,是可以动态地分配存储空间的一种结构。,数组是一种静态地分配存储空间的方式,11.2,用指针处理链表,head,1249,C,1021,1475,D,NULL,1021,B,1475,1356,A,1356,1249,A,B,C,D,p,链表的构成:,头指针,存放一个地址,指向链表的第一个元素,链表中每个元素称为一个“结点”,每个结点包括两部分:用户数据和指向下一个结点的地址,最后一个元素称为“表尾”,其地址为,NULL,(空地址),#include,struct,node /*,定义结点类型*,/,char data;/*,数据域*,/,struct,node*next;,/*,指向下一个结点的指针域*,/,a,b,c,d,*head,*p;,11.2,用指针处理链表,head,?,C,?,1475,D,?,1021,B,?,1356,A,?,1249,head=&,a;a.next,=&,b;b.next,=&,c;c.next,=,d.next,=,NULL;p,=head;,head,C,1475,D,NULL,1021,B,1356,A,1249,p,do,printf(%c-,p,-data);,p=p-next;,while(p!=NULL);,p,p,p,p,NULL,静态链表:,需要的节点事先建立,动态链表,所需函数,11.2,用指针处理链表,函数名,函数原型,功能,返回值,malloc,void*,malloc(unsigned,size),分配,size,字节的存储区,所分配的内存区起始地址,free,void free(*p),释放,p,所指的内存区,无,定义节点类型,#define NULL 0 /*,空地址,*,/,#define LEN,sizeof(struct,node)/*,结点长度,*,/,struct,node,int,data;,struct,node*next;,int,n;,/*,表示结点个数*,/,建立动态链表,11.2,用指针处理链表,struct,node*,creat(void,),struct,node*head,*p,*q;,n=0;,p=(,struct,node*),malloc(LEN,);,scanf(“%d”,&p,-data);,head=NULL;,while(p-num!=0),n+;,if(n=1)head=p;/*,头指针指向第一个结点*,/,else q-next=p;/*,链入新结点*,/,q=p;/*q,指针总是指向链表的最后一个结点*,/,p=(,struct,node*),malloc(LEN,);,scanf(,“%d”,&p,-data,);,q-next=NULL;/*,处理尾结点的指针域*,/,return(head,);,1,p,head,q,1,p,3,p,q,q,3,p,5,p,q,q,5,p,0,p,main(),struct,node*head;,head=,creat,();,输出链表,11.2,用指针处理链表,void,print(struct,node*head),struct,node*p;,p=head;,if(head!=NULL),do,printf,(%,d,p,-data);,p=p-next;,while(p,!=NULL);,main(),struct,node*head;,head=,creat,();,print(head,);,3,1,p,head,5,p,p,p,p,p,p,NULL,链表的删除,(,删除,p,所指的结点,),11.2,用指针处理链表,3,1,p,head,5,head=p-next;,free(p,);,3,1,q,head,5,p,q-next=p-next;,free(p,);,5,3,head,p,p,1,q,head,5,链表的插入(在,q,所指结点前插入新结点*,s,),11.2,用指针处
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 管理文书 > 施工组织


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!