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

    第九讲 结构体共用体链表优秀课件.ppt

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

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

    第九讲 结构体共用体链表优秀课件.ppt

    第九讲 结构体共用体链表第1页,本讲稿共22页6.4.1 6.4.1 结构体概述结构体概述结构体概述结构体概述 一组相关的不同数据类型的数据项,可作一个整体来一组相关的不同数据类型的数据项,可作一个整体来一组相关的不同数据类型的数据项,可作一个整体来一组相关的不同数据类型的数据项,可作一个整体来处理。处理。处理。处理。C C中称结构体类型数据中称结构体类型数据中称结构体类型数据中称结构体类型数据。下例中定义了结构体类型下例中定义了结构体类型下例中定义了结构体类型下例中定义了结构体类型studentstudent和结构体变量和结构体变量和结构体变量和结构体变量stu1,stu2stu1,stu2。前者是数据类型,后者是变量。前者是数据类型,后者是变量。前者是数据类型,后者是变量。前者是数据类型,后者是变量。结构体类型结构体类型结构体类型结构体类型studentstudent结构体变量结构体变量结构体变量结构体变量st1st1结构体变量结构体变量结构体变量结构体变量st2st2第2页,本讲稿共22页定义结构体的类型定义结构体的类型定义结构体类型定义结构体类型一般形式一般形式:struct 结构体类型名结构体类型名 变量类型变量类型 变量名;变量名;变量类型变量类型 变量名;变量名;变量类型变量类型 变量名;变量名;结构变量名表结构变量名表;注意:注意:“结构类型名结构类型名”和和“结构变量名表结构变量名表”,可省略一,可省略一个。个。关键字关键字关键字关键字structstruct和它后面和它后面和它后面和它后面的结构体类型名一起组的结构体类型名一起组的结构体类型名一起组的结构体类型名一起组成一个新的数据类型名成一个新的数据类型名成一个新的数据类型名成一个新的数据类型名 第3页,本讲稿共22页例例例例 struct studentstruct student int num;int num;char name20;char name20;char sex;char sex;int age;int age;float score;float score;namenumsexagescore2字节字节2字节字节20字节字节1字节字节4字节字节结构体类型定义描述结构结构体类型定义描述结构的组织形式的组织形式,不分配内存不分配内存例子图解例子图解第4页,本讲稿共22页定义结构体的变量定义结构体的变量定义结构体变量定义结构体变量1.定义结构体的同时定义定义结构体的同时定义struct student .st1,st2;2.先定义结构体,后定义结构体变量先定义结构体,后定义结构体变量 例:例:struct student .;struct student st1,st2;3.直接定义直接定义 例:例:struct .st1,st2;在在struct 后不出现结构体类型名后不出现结构体类型名第5页,本讲稿共22页例例例例 struct studentstruct student int num;int num;char name20;char name20;char sex;char sex;int age;int age;char addr30;char addr30;struct student stu1=112,“Wang Lin”,M,19,“200 Beijing Road”;struct student stu1=112,“Wang Lin”,M,19,“200 Beijing Road”;结构体变量的初始化结构体变量的初始化例例例例 struct studentstruct student int num;int num;char name20;char name20;char sex;char sex;int age;int age;char addr30;char addr30;stu1=112,“Wang Lin”,M,19,“200 Beijing Road”;stu1=112,“Wang Lin”,M,19,“200 Beijing Road”;例例 struct int num;char name20;char sex;int age;char addr30;stu1=112,“Wang Lin”,M,19,“200 Beijing Road”;第6页,本讲稿共22页引用规则引用规则引用规则引用规则 结构体变量不能整体引用结构体变量不能整体引用结构体变量不能整体引用结构体变量不能整体引用,只能引用变量成员只能引用变量成员只能引用变量成员只能引用变量成员可以将一个结构体变量赋值给另一个结构体变量可以将一个结构体变量赋值给另一个结构体变量 例如:例如:tomorrw=today;引用方式:引用方式:引用方式:引用方式:结构体变量名结构体变量名结构体变量名结构体变量名.成员名成员名成员名成员名6.4.2 结构体变量的引用结构体变量的引用输入今天的日期,然后输出该日期。输入今天的日期,然后输出该日期。输入今天的日期,然后输出该日期。输入今天的日期,然后输出该日期。main()main()struct date struct date /*/*定义结构类型定义结构类型定义结构类型定义结构类型date*/date*/int year;int year;int int month;month;intint day;day;struct date today,struct date today,tomorrowtomorrow;/*/*说明结构变量说明结构变量说明结构变量说明结构变量today*/today*/scanf(%d%d%d,&today.year,&today.month,&today.day);scanf(%d%d%d,&today.year,&today.month,&today.day);printf(%d.%d.%dn,today.year,today.month,today.day);printf(%d.%d.%dn,today.year,today.month,today.day);第7页,本讲稿共22页struct student int num;char name20;char sex;struct date birthday;float score;stu1,stu2;struct date int month;int day;int year;结构体嵌套时逐级引用结构体嵌套时逐级引用对上面定义的结构变量对上面定义的结构变量对上面定义的结构变量对上面定义的结构变量stu1stu1,可以这样访问各个成员:,可以这样访问各个成员:,可以这样访问各个成员:,可以这样访问各个成员:stu1.numstu1.numstu1.namestu1.namestu1.sexstu1.sexstu1.birthday.monthstu1.birthday.monthstu1.birthday.daystu1.birthday.daystu1.birthday.yearstu1.birthday.year第8页,本讲稿共22页6.4.3 结构体类的指针结构体类的指针指向结构体类变量的指针指向结构体类变量的指针 指向结构体类变量的指针就是该变量所占用的内存区段指向结构体类变量的指针就是该变量所占用的内存区段的首址。的首址。例例:struct student int num;char name3;char sex;float score;st1,st2,st3;struct student *p=&st1;printf(“%d,%s”,st1.num,st1.name);printf(“%d,%s”,(*p).num,(*p).name);printf(“%d,%s”,p-num,p-name);numnumnamenamesexsexscorescore:2 2A00HA00Hst1st1第9页,本讲稿共22页6.4.32.结构体数组与结构体数组与指向结构体类数组的指针指向结构体类数组的指针结构体类型也可以定义数组结构体类型也可以定义数组每个下标变量每个下标变量stui 都有结构体类型都有结构体类型student 的各个分量;的各个分量;指向结构体类数组的指针就是该数组所占用的内存区段的首指向结构体类数组的指针就是该数组所占用的内存区段的首指向结构体类数组的指针就是该数组所占用的内存区段的首指向结构体类数组的指针就是该数组所占用的内存区段的首址。址。址。址。例例:struct student int num;char name3;char sex;float score;st30=;struct student *p;for(p=st;pnum,p-name);:st0st1st2st3:第10页,本讲稿共22页 6.4.4 6.4.4 结构指针作为函数的参数结构指针作为函数的参数结构指针作为函数的参数结构指针作为函数的参数 结构类型指针作为函数的参数可以实现从函数返回多个值。结构类型指针作为函数的参数可以实现从函数返回多个值。struct person char *name;/*pp子函数给结构的各成员赋值子函数给结构的各成员赋值*/int nq;void pp(struct person*y)void pp(struct person*y)float s;y-name=“gongda”;y-name=“gongda”;y-nq=100;y-nq=100;y-s=35.8;y-s=35.8;main()void pp(struct person*y);struct person x;pp(&x);printf(“name:%sn”,x.name);printf(“nq:%dts=%fn”,x.nq,x.s);第11页,本讲稿共22页 将若干数据项按一定的原则连接起来。链表中每一个数据称为将若干数据项按一定的原则连接起来。链表中每一个数据称为将若干数据项按一定的原则连接起来。链表中每一个数据称为将若干数据项按一定的原则连接起来。链表中每一个数据称为节点。节点。节点。节点。前一个节点指向下一个节点,而且只有通过前一个节点前一个节点指向下一个节点,而且只有通过前一个节点前一个节点指向下一个节点,而且只有通过前一个节点前一个节点指向下一个节点,而且只有通过前一个节点才能找才能找才能找才能找到下一个节点。到下一个节点。到下一个节点。到下一个节点。根据需要开辟或释放存储单元根据需要开辟或释放存储单元根据需要开辟或释放存储单元根据需要开辟或释放存储单元 存储空间不连续存储空间不连续存储空间不连续存储空间不连续6.4.5 结构体的应用结构体的应用2.链表链表(Link List)a a1 1 a a2 2 a a3 3 .a an n headheadstruct nodestruct nodedatadata nextnextaistruct node int data;struct node*next;struct node*next;struct node*head;单向链表单向链表单向链表单向链表第12页,本讲稿共22页1)建立链表)建立链表2)输出链表)输出链表 3)插入结点)插入结点 4)删除结点)删除结点a1 a2 a3.anhead动态存储分配函数(应包含动态存储分配函数(应包含malloc.h或或stdlib.h)malloc(size)函数函数在内存的动态存储区内分配一个长度为在内存的动态存储区内分配一个长度为size的连续存储空的连续存储空间。函数的返回值是分配给该结点的起始地址。如果分配间。函数的返回值是分配给该结点的起始地址。如果分配没有成功,返回没有成功,返回0p=(struct node*)malloc(sizeof(struce node)sizeof(struce node);free(p)函数函数释放由参数释放由参数p指针指向的内存存储空间指针指向的内存存储空间第13页,本讲稿共22页 struct stu struct stu int num;int num;float score;float score;a,b,c a,b,c;main()main()a.num=101;a.score=68.5;a.num=101;a.score=68.5;b.num=102;b.score=77.8;b.num=102;b.score=77.8;c.num=103;c.score=88.5;c.num=103;c.score=88.5;h=&a;h=&a;a.next=&b;a.next=&b;b.next=&c;b.next=&c;c.next=NULL;c.next=NULL;二、简单链表的建立与输出 struct stu struct stu *next*next ;struct stu struct stu *h*h;例如:建立一个有例如:建立一个有例如:建立一个有例如:建立一个有3 3 3 3名学生数据的简单链表名学生数据的简单链表名学生数据的简单链表名学生数据的简单链表a1 a2 a3.anhead第14页,本讲稿共22页#include include struct node int data;struct node*next;struct node int data;struct node*next;main()struct node *h,*p,*q;int a;struct node *h,*p,*q;int a;h=(struct node*)malloc(sizeof(struct node);p=q=h;h=(struct node*)malloc(sizeof(struct node);p=q=h;scanf(“%d”,a);scanf(“%d”,a);While(a!=0)While(a!=0)p-data=a;q-next=p;q=p;p-data=a;q-next=p;q=p;p=(struct node*)malloc(sizeof(struct node);p=(struct node*)malloc(sizeof(struct node);scanf(%d”,&a);scanf(%d”,&a);q-next=NULL;q-next=NULL;free(p);free(p);6.4.5 动态链表的建立(单向链表)动态链表的建立(单向链表)a1 a2 a3.anhead第15页,本讲稿共22页6.4.5输出链表输出链表(遍历链表遍历链表)printlist(struct node*h)struct node*p;p=h;while(p!=NULL)while(p!=NULL)printf(“%d”,p-data);p=p-next;第16页,本讲稿共22页8.4.2链表链表插入节点插入节点 101 101 107 107 NULL NULL 108108 head head 105 105 100 100 110 110 106 106 p0 p0 p0 p0 p0 p0 插入头结点插入头结点插入尾结点插入尾结点插入中间结点插入中间结点第17页,本讲稿共22页Del(struct node*h,int x)struct node*p,*q;while(p!=NULL&p-data!=x)q=p;p=p-next;/寻找需要删除的结点寻找需要删除的结点if(p!=NULL)if(p=h)h=p-next;/如果是头结点,则头结点指针修改如果是头结点,则头结点指针修改else q-next=p-next;/删除删除p指向的结点指向的结点 free(p);/释放释放p所占的内存空间所占的内存空间8.4.2链表链表删除节点删除节点 101 101 107 107 NULL NULL 108108 head head 105 105 第18页,本讲稿共22页6.6 联合体(共用体)联合体(共用体)存储形态:存储形态:存储形态:存储形态:共用体类变量的若干分量共占同一存储空间。共用体类变量的若干分量共占同一存储空间。共用体类变量的若干分量共占同一存储空间。共用体类变量的若干分量共占同一存储空间。union dataunion data int i;int i;char c;char c;long l;long l;com;com;com.i=97;com.i=97;printf(“%d”,com.i);printf(“%d”,com.i);printf(“%c”,com.c);printf(“%c”,com.c);printf(“%ld”,com.l);printf(“%ld”,com.l);c c i il l0000 0000 0000 10100000 0000 0000 1010 01000001 010000010000 0000 0000 0000 0000 0000 0000 0000 0000 0110 00010000 0000 0000 0110 0001 共用体类型及其变量的定义和引用与结构体类似,本质的不同共用体类型及其变量的定义和引用与结构体类似,本质的不同共用体类型及其变量的定义和引用与结构体类似,本质的不同共用体类型及其变量的定义和引用与结构体类似,本质的不同是使用内存的方式。是使用内存的方式。是使用内存的方式。是使用内存的方式。union union 共用体名共用体名共用体名共用体名 类型标识符类型标识符类型标识符类型标识符 成员名;成员名;成员名;成员名;类型标识符类型标识符类型标识符类型标识符 成员名;成员名;成员名;成员名;.;第19页,本讲稿共22页6.6.2 枚举类型枚举类型枚举:将可能取的值一一列举出来。枚举:将可能取的值一一列举出来。枚举类型的变量仅有几个确定的值。枚举类型的变量仅有几个确定的值。枚举类型的声明方式:枚举类型的声明方式:enum 枚举类型名枚举类型名枚举类型名枚举类型名 枚举列表枚举列表枚举列表枚举列表 变量表;变量表;变量表;变量表;enum weekday sun,mon,tue,wed,thu,fri,sat workday;枚举元素是常量,具有数值。按顺序默认为枚举元素是常量,具有数值。按顺序默认为0,1,2,.。上例中上例中sun为为0,mon为为1.;枚举类型的变量枚举类型的变量workday的值只能取的值只能取0、1、2、3、4、5、6之一。之一。也可以在定义时按需求指定,指定元素的后续元素的值顺序增也可以在定义时按需求指定,指定元素的后续元素的值顺序增1。enum weekdaysun=7,mon=1,tue,wed,thu,fri,satworkday;此时此时tue为为2,wed为为3,.sat为为6。第20页,本讲稿共22页6.6.3 类型别名类型别名 含义含义含义含义是给已有的类型起别名,是给已有的类型起别名,是给已有的类型起别名,是给已有的类型起别名,并未创造新的类并未创造新的类并未创造新的类并未创造新的类型型型型。方法方法方法方法typedef 例如:例如:例如:例如:typedef float REAL;typedef float REAL;REAL x,y;等价于:等价于:float x,y;第21页,本讲稿共22页位段(位域)位段(位域)概念概念概念概念 以位(以位(以位(以位(bit)bit)为单位定长的结构体类型的分量为单位定长的结构体类型的分量为单位定长的结构体类型的分量为单位定长的结构体类型的分量 可以是可以是可以是可以是 int,unsigned,signedint,unsigned,signed 定义定义定义定义 struct bitsegstruct bitseg unsigned a:2;unsigned a:2;unsigned b:3;unsigned c:6;unsigned d:4;bits1,bits2;d c b ad c b a引用引用引用引用 其它结构体其它结构体其它结构体其它结构体类型变量的类型变量的类型变量的类型变量的分量的用法分量的用法分量的用法分量的用法基本一样。基本一样。基本一样。基本一样。第22页,本讲稿共22页

    注意事项

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

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




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

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

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

    收起
    展开