欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    《结构体共用体》PPT课件.ppt

    • 资源ID:70508642       资源大小:596KB        全文页数:38页
    • 资源格式: PPT        下载积分:11.9金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要11.9金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    《结构体共用体》PPT课件.ppt

    第十四章第十四章结构体、共用体和用户定义类型结构体、共用体和用户定义类型14.1 用用typedef定义类型定义类型功能:用自定义名字为已有数据类型命名类型定义简单形式:typedef type name;例 typedef int INTEGER;类型定义语句关键字已有数据类型名用户定义的类型名例 typedef float REAL;类型定义后,与已有类型一样使用例 INTEGER a,b,c;REAL f1,f2;int a,b,c;float f1,f2;说明说明:1.typedef 1.typedef 没有创造没有创造新数据类型新数据类型2.typedef 2.typedef 是定义类型是定义类型,不能定义变量不能定义变量3.typedef 3.typedef 与与 define define 不同不同 definedefine typedeftypedef预编译时处理预编译时处理 编译时处理编译时处理简单字符置换简单字符置换 为已有类型命名为已有类型命名 ntypedeftypedef定义类型步骤定义类型步骤按定义变量方法先写出定义体。按定义变量方法先写出定义体。如:如:intint i i;将变量名换成新类型名将变量名换成新类型名。如如:intint INTEGER INTEGER;最前面加最前面加typedeftypedef 如如:typedeftypedef intint INTEGERINTEGER;用新类型名定义变量用新类型名定义变量 如如:INTEGERINTEGER i,j i,j;v一一个个学学生生的的信信息息有有学学号号、姓姓名名、性性别别、年年龄龄、住址住址、成绩成绩等。等。v一本图书的信息有一本图书的信息有分类编号分类编号、书名书名、作者作者、出版社出版社、出版日期出版日期、价格价格、库存量库存量等。等。v如何描述这些类型不同的相关数据?如何描述这些类型不同的相关数据?结构体结构体结构体结构体一种构造类型数据一种构造类型数据 结构体结构体由若干不同类型的数据项组成,由若干不同类型的数据项组成,构成结构体的各个数据项称为构成结构体的各个数据项称为结构体成员结构体成员。信息管理信息管理o14.214.2 结构体结构体&结构体是结构体是一种构造数据类型一种构造数据类型&用途:把不同类型的数据组合成一个整体用途:把不同类型的数据组合成一个整体-自定义自定义数据类型数据类型n结构体类型定义结构体类型定义 struct 结结构体名构体名 数据数据类类型型1 成成员员名名1;数据数据类类型型2 成成员员名名2;数据数据类类型型n 成成员员名名n;lstructstruct为关键字;为关键字;l结结构构体体名名是是用用户户定定义义的的类型标识类型标识。l 中中是是组组成成该该结结构构体体的的成成员员。成成员员的的数数据据类类型型可可以以是是C语语言言所所允允许的任何数据类型许的任何数据类型。例如学生类型的定义:例如学生类型的定义:struct student int num;/*学号学号*/char name20;/*姓名姓名*/char sex;/*性别性别*/int age;/*年龄年龄 */float score;/*成绩成绩*/char addr30;/*住址住址*/;namenumsexagescoreaddr2字节字节2字节字节20字节字节1字节字节4字节字节30字节字节.o 结构体变量的说明结构体变量的说明n先定义结构体类型,再定义结构体变量先定义结构体类型,再定义结构体变量o一般形式:一般形式:struct 结构体名结构体名 类型标识符类型标识符 成员名;成员名;类型标识符类型标识符 成员名;成员名;.;struct 结构体名结构体名 变量名表列变量名表列;例例 struct student int num;char name20;char sex;int age;float score;char addr30;struct student stu1,stu2;n定义结构体类型的同时定义结构体变量一般形式:struct 结构体名结构体名 类型标识符类型标识符 成员名;成员名;类型标识符类型标识符 成员名;成员名;.变量名表列变量名表列;例例 struct student int num;char name20;char sex;int age;float score;char addr30;stu1,stu2;直接定义结构体变量直接定义结构体变量一般形式:一般形式:struct 类型标识符类型标识符 成员名;成员名;类型标识符类型标识符 成员名;成员名;.变量名表列变量名表列;例例 struct int num;char name20;char sex;int age;float score;char addr30;stu1,stu2;说明说明结构体类型与结构体变量概念不同类型类型:不分配内存不分配内存;变量变量:分配内存分配内存类型类型:不能赋值、存取、运算;不能赋值、存取、运算;变量变量:可以可以结构体可嵌套结构体成员名与程序中变量名可相同,不会混淆例例 struct date int month;int day;int year;struct student int num;char name20;struct date birthday;stu;numnamebirthdaymonthdayyear例 struct student int num;char name20;struct date int month;int day;int year;birthday;stu;numnamebirthdaymonthdayyearo 结构体变量的初始化结构体变量的初始化n形式一:struct 结构体名结构体名 类型标识符类型标识符 成员名;成员名;类型标识符类型标识符 成员名;成员名;.;struct 结构体名结构体名 结构体变量结构体变量=初始数据初始数据;例例 struct student int num;char name20;char sex;int age;char addr30;struct student stu1=112,“Wang Lin”,M,19,“200 Beijing Road”;形式二:形式二:struct 结构体名结构体名 类型标识符类型标识符 成员名;成员名;类型标识符类型标识符 成员名;成员名;.结构体变量结构体变量=初始数据初始数据;例例 struct student int num;char name20;char sex;int age;char addr30;stu1=112,“Wang Lin”,M,19,“200 Beijing Road”;o结构体变量的引用n引用规则o 结构体变量不能整体引用,只能引用变量成员 结构体嵌套时结构体嵌套时逐级引用逐级引用成员成员(分量分量)运算符运算符优先级优先级:1结合性结合性:从左向右从左向右引用方式:引用方式:结构体变量名结构体变量名.成员名成员名例例 struct student int num;char name20;char sex;int age;float score;char addr30;stu1,stu2;stu1.num=10;stu1.score=85.5;stu1.score+=stu2.score;stu1.age+;例例 struct student int num;char name20;char sex;int age;float score;char addr30;stu1,stu2;printf(“%d,%s,%c,%d,%f,%sn”,stu1);()stu1=101,“Wan Lin”,M,19,87.5,“DaLian”;()例例 struct student int num;char name20;struct date int month;int day;int year;birthday;stu1,stu2;numnamebirthdaymonthdayyearstu1.birthday.month=12;o结构体和指针n指向结构体变量的指针o定义形式:struct 结构体名 *结构体指针名;例 struct student *p;使用结构体指针变量引用成员形式存放结构体变量在内存的起始地址numnamesexagestupstruct student int num;char name20;char sex;int age;stu;struct student *p=&stu;(*结构体指针名结构体指针名).成员名成员名结构体指针名结构体指针名-成员名成员名结构体变量名结构体变量名.成员名成员名指向运算符优先级:1结合方向:从左向右例 指向结构体的指针变量main()struct student long int num;char name20;char sex;float score;stu_1,*p;p=&stu_1;stu_1.num=89101;strcpy(stu_1.name,Li Lin);p-sex=M;p-score=89.5;printf(nNo:%ldnname:%snsex:%cnscore:%fn,(*p).num,p-name,stu_1.sex,p-score);例 int n;int *p=&n;*p=10;n=10struct student stu1;struct student *p=&stu1;stu1.num=101;(*p).num=101o 结构体数组n结构体数组的定义结构体数组的定义三种形式:三种形式:形式一:struct student int num;char name20;char sex;int age;struct student stu2;形式二:struct student int num;char name20;char sex;int age;stu2;形式三:struct int num;char name20;char sex;int age;stu2;numnamesexagenumnamesexagestu0stu125Bn结构体数组初始化例 struct int num;char name20;char sex;int age;stu=,;顺序初始化:struct student int num;char name20;char sex;int age;struct student stu=100,“Wang Lin”,M,20,101,“Li Gang”,M,19,110,“Liu Yan”,F,19;例 struct student int num;char name20;char sex;int age;stu=,;分行初始化:struct student int num;char name20;char sex;int age;struct student stu=100,“Wang Lin”,M,20,101,“Li Gang”,M,19,110,“Liu Yan”,F,19;全部初始化时维数可省结构体数组引用引用方式:结构体数组名下标.成员名 struct student int num;char name20;char sex;int age;str3;stu1.age+;strcpy(stu0.name,”ZhaoDa”);例例 统计候选人选票统计候选人选票struct person char name20;int count;leader3=“Li”,0,“Zhang”,0,”Wang“,0;main()int i,j;char name20;for(i=1;i=10;i+)scanf(%s,name);for(j=0;j3;j+)if(strcmp(name,leaderj.name)=0)leaderj.count+;for(i=0;i3;i+)printf(%5s:%dn,leaderi.name,leaderi.count);namecountLiZhangWang000 结构体类型命名例如:struct node char c;struct node*next;typedef struct node CHNODE;CHNODE *p;/*相当于struct node*p;*/链表 概概 述述 n链表是一种动态数据结构,可根据需要动态地分配存储单元。n链表不要求逻辑上相邻的元素在物理位置上也相邻n在数组中,插入或删除一个元素都比较繁琐,而用链表则相对容易。n数组元素的引用比较简单,对于链表中结点数据的存取操作则相对复杂。1 1链表结构链表结构1.1.链表中每个元素称为一个链表中每个元素称为一个结点结点2.2.每个结点由每个结点由2 2个域组成:个域组成:1 1)数据域)数据域存储结点本身的存储结点本身的信息信息。2 2)指针域)指针域指向后继结点的指向后继结点的指针指针。3.3.构成链表的结点必须是构成链表的结点必须是结构体类型结构体类型数据。数据。4.4.相相邻邻结结点点的的地地址址不不一一定定是是连连续续的的,依依靠靠指指针针将将它它们们连连接接起来。起来。head 1000 1032 3284 1296 1382 2008 动态单向链表示意图动态单向链表示意图C3284H1296A1382I2008NNULLNULL10001032链表结构的定义链表结构的定义struct nodechar name10;struct node*next;vnext为struct node 类型指针变量,指向下一个结点。v结点的变量或指针变量的定义:struct node student,*head;nstudent可以存放一个学生结点n指针head可以存放学生结点的地址。动态分配存储空间库函数动态分配存储空间库函数1 1void *malloc(unsigned int size);void *malloc(unsigned int size);mallocmalloc在内存的动态存储区中分配一个在内存的动态存储区中分配一个sizesize长度的长度的连续存储空间。连续存储空间。返回值:返回值:返回一个指向分配域地址的指针(类型为返回一个指向分配域地址的指针(类型为voidvoid);若未成功,则返回空指(若未成功,则返回空指(NULLNULL)int*p;p=(int*)malloc(8);p指示系统分配的4个整型存储单元的起始地址2.void*calloc(unsigned n,unsigned size);v函数作用:函数作用:在内存的动态存储区中分配在内存的动态存储区中分配n n个长度个长度为为size size 的连续空间。的连续空间。v返回值:返回值:一个指向分配域起始地址的指针;不成一个指向分配域起始地址的指针;不成功返回功返回NULLNULL。v用用calloccalloc函数可以为一维数组开辟动态存储空间,函数可以为一维数组开辟动态存储空间,n n为数组元素个数,每个元素长度为为数组元素个数,每个元素长度为sizesize。int *ip;int *ip;ip=(int*)calloc(10,sizeof(int);ip=(int*)calloc(10,sizeof(int);动态分配了动态分配了10个存放整个存放整型数据的存储单元型数据的存储单元 3.void free(void*p);o函数函数freefree释放由指针变量释放由指针变量p p所指示的内存区所指示的内存区域。域。例如:例如:free(p);free(p);通过函数通过函数freefree将已分配的内存区域交还系统,将已分配的内存区域交还系统,使系统可以重新对其进行分配。使系统可以重新对其进行分配。int *ip;int *ip;ip=(int*)calloc(10,sizeof(int);ip=(int*)calloc(10,sizeof(int);free(ip);free(ip);【例【例】动态定义数组。】动态定义数组。#include void main()int n,i,*p;scanf(%d,&n);p=(int*)malloc(n*sizeof(int);for(i=0;in;i+)pi=i*i;for(i=0;inext=p;/*q-next=p;/*新结点与尾结点相连接新结点与尾结点相连接新结点与尾结点相连接新结点与尾结点相连接*/*/q=p;/*q=p;/*使使使使q q指向新的尾结点指向新的尾结点指向新的尾结点指向新的尾结点*/*/【例【例11.8】建立一个学生】建立一个学生电话电话簿的簿的单单向向链链表函数。表函数。链表的建立操作 struct student char name20;char tel10;struct student*next;typedef struct student STU;STU*creat()STU*p,*q,*h;p=(STU*)malloc(sizeof(STU);scanf(“%s”,p-name);while(strlen(p-name)!=0)scanf(“%s”,p-tel);p-next=NULL;if(h=NULL)h=p;else q-next=p;q=p;p=(STU*)malloc(sizeof(STU);gets(p-name);return h;【例14.1】在学生电话簿链表中插入一个学生的信息。要求将新的信息插入在指定学生信息之前,如果未找到指定学生,则追加在链表尾部。hpChangChang6278341062783410LiLi6875234168752341NULLNULLWangWang6321298663212986(a)在表头插入结点(head=p0;p0-next=p)ZhaoZhao6275842162758421p0链表的插入操作 hChang62783410Li68752341NULLWang63212986(b)在表中间插入结点(q-next=p0;p0-next=p)pqZhao62758421p0【例14.1】在学生电话簿链表中插入一个学生的信息。要求将新的信息插入在指定学生信息之前,如果未找到指定学生,则追加在链表尾部。【例14.1】在学生电话簿链表中插入一个学生的信息。要求将新的信息插入在指定学生信息之前,如果未找到指定学生,则追加在链表尾部。hpChangChang6278341062783410LiLi6875234168752341NULLNULLWangWang6321298663212986pp(c)在表尾追加结点(p-next=p0;p0-next=NULL)qq ZhaoZhao6275842162758421p0ZhaoZhao6275842162758421NULLNULL struct node*p,*q;if(head=NULL)head=p0;p0-next=NULL;else p=head;while(strcmp(x,p-name)!=0&p-next!=NULL)q=p;p=p-next;if(strcmp(x,p-name)=0 if(p=head)head=p0;else q-next=p0;p0-next=p;else p-next=p0;p0-next=NULL;return head;struct node*insert(struct node *head,struct node *p0,char *x)hpChang62783410Li68752341NULLWang63212986(a)删删除除第一个结点第一个结点(head=p-next)【例14.1】删除学生电话簿链表中指定学生的信息。链表的删除操作链表的删除操作 hChang62783410Li68752341NULLWang63212986(b)删删除除中间结点或尾结点中间结点或尾结点(q-next=p-next)q【例14.1】删除学生电话簿链表中指定学生的信息。p struct node*p,*q;struct node*p,*q;if(head=NULL)if(head=NULL)printfprintf(This(This is is a a empty empty list.);list.);return head;return head;p=head;p=head;while while(strcmp(x,p-name)!=0(strcmp(x,p-name)!=0&p-next!=NULL)&p-next!=NULL)q=p;p=p-next;q=p;p=p-next;if if(strcmp(x,p-name)=0)(strcmp(x,p-name)=0)if if(p=head)(p=head)head=p-next;head=p-next;elseelse q-next=p-next;q-next=p-next;free(p);free(p);elseelse printf(Not found.);printf(Not found.);return head;return head;struct node*delnode(struct node *head,char *x)o14.3 共用体共用体&构造数据类型构造数据类型,也叫联合体也叫联合体&用途:使几个不同类型的变量共占一段内存用途:使几个不同类型的变量共占一段内存(相互覆盖相互覆盖)n共用体类型定义共用体类型定义定义形式:定义形式:union 共用体名共用体名 类型标识符类型标识符 成员名;成员名;类型标识符类型标识符 成员名;成员名;.;例 union data int i;char ch;float f;共用体变量引用引用方式:共用体变量名共用体变量名.成员名成员名形式一:union data short i;char ch;float f;a,b;形式二:union data short i;char ch;float f;union data a,b,c;形式三:union short i;char ch;float f;a,b,c;fchifchiab共用体变量定义分配内存,长度=最长成员所占字节数共用体变量任何时刻只有一个成员存在结构体与共用体区别:存储方式不同struct node char ch2;int k;a;union node char ch2;int k;b;achkbch k变量的各成员同时存在任一时刻只有一个成员存在

    注意事项

    本文(《结构体共用体》PPT课件.ppt)为本站会员(wuy****n92)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

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

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开