欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > PPT文档下载  

    C语言ppt课件第9章 结构体与链表.ppt

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

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

    C语言ppt课件第9章 结构体与链表.ppt

    第九章 结构体与链表,内容提要,结构体类型的定义结构体类型变量结构体类型数组结构体类型指针结构体与函数链表,结构体概述(1),结构体1.什么叫结构体:把不同类型的数据组合成一个整体的自定义数据类型, 是一种构造数据类型。2.结构体类型定义,struct 结构体名 类型标识符 成员名1; 类型标识符 成员名2; .;,成员类型可以是基本型或构造型,struct是关键字,不能省略,合法标识符可省:无名结构体,结构体概述(2),定义结构体类型,描述下列数据 (1) 学生情况: 包含学生的学号、 姓名、 性别、 年龄、C语言课程成绩:,struct studentint no; /*学号*/ char name10; /*姓名*/ char sex; /*性别*/ int age; /*年龄*/ float score; /*C成绩*/;注:;不能省,结构体类型定义描述结构的组织形式,不分配内存,如考虑10门课程成绩, 加上总成绩与平均成绩,可作如下定义:,struct studentint no; /*学号*/ char name10; /*姓名*/ char sex; /*性别*/ int age; /*年龄*/ float score10; /*10门课程成绩*/ float tcj, acj; /*总成绩, 平均成绩*/;,定义结构体类型,描述下列数据 (2)个人数据: 包含姓名、性别、年龄、身高、体重、住址:,struct personchar name20; /*姓名*/char sex; /*性别*/int age; /*年龄*/float height; /*身高*/float weight; /*体重*/char addr50; /*住址*/;,(3)日期结构体类型包括年、月、日:struct dateint year; /*年*/month; /*月*/day; /*日*/;,(4)如职工信息结构体类型:struct personchar name20; /*姓名*/char address40; /*地址*/float salary; /*工资*/float cost; /*扣款*/struct date hiredate; /*聘任日期*/;,结构体类型可以嵌套定义即一个结构体类型中的某些成员又是其他结构体类型,结构体类型变量的定义(1),先定义结构体类型,再定义结构体变量一般形式:,例 struct student int num; char name20; char sex; int age; float score; char addr30; ; struct student stu1,stu2;,struct 结构体名 类型标识符 成员名; 类型标识符 成员名; .;struct 结构体名 变量名表列;,例 #define STUDENT struct student STUDENT int num; char name20; char sex; int age; float score; char addr30; ; STUDENT stu1,stu2;,结构体类型变量的定义(2),定义结构体类型的同时定义结构体变量一般形式:,struct 结构体名 类型标识符 成员名; 类型标识符 成员名; .变量名表列;,例 struct student int num; char name20; char sex; int age; float score; char addr30; stu1,stu2;,结构体类型变量的定义(3),直接定义结构体变量(匿名定义)一般形式:,struct 类型标识符 成员名; 类型标识符 成员名; .变量名表列;,例 struct int num; char name20; char sex; int age; float score; char addr30; stu1,stu2;,用无名结构体直接定义变量只能一次,结构体类型声明的说明,说明结构体类型与结构体变量概念不同类型:不分配内存; 变量:分配内存类型:不能赋值、存取、运算; 变量:可以结构体可嵌套结构体成员名与程序中变量名可相同,不会混淆结构体类型及变量的作用域与生存期,结构体变量的使用(1),由结构体变量名引用其成员结构体变量不能整体引用,只能引用变量成员,可以将一个结构体变量赋值给另一个结构体变量结构体嵌套时逐级引用,引用方式: 结构体变量名.成员名,成员(分量)运算符优先级: 1结合性:从左向右,结构体变量的初始化(1),形式一:,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”;,结构体变量的初始化(2),形式二:,struct 结构体名 类型标识符 成员名; 类型标识符 成员名; .结构体变量=初始数据;,例 struct student int num; char name20; char sex; int age; char addr30; stu1=112,“Wang Lin”,M,19, “200 Beijing Road”;,结构体变量的初始化(3),形式三:,struct 类型标识符 成员名; 类型标识符 成员名; .结构体变量=初始数据;,例 struct int num; char name20; char sex; int age; char addr30; stu1=112,“Wang Lin”,M,19, “200 Beijing Road”;,结构体变量存储分配示意图,例 9.1 求某同学上学期8门课程的总成绩与平均成绩。,程序如下:main( ) int i; struct st char xm8; float cj9; float tcj, acj; stu;,scanf(%s, stu.xm); /*输入*/for(i=1; i=8;i+) scan(%f, i+) stu.tcj+=stu.cji; stu.acj=stu.tcji/8; /*求平均成绩*/printf(%s的总成绩=%6.2f, 平均成绩=%6.2f,stu.xm,stu.tcj,stu.acj);,输入数据: CHEN 80 86 79 98 88 72 96 66运行结果: CHEN的总成绩=577.00, 平均成绩= 72.13,结构体类型数组,结构体数组的定义三种形式:,形式一: 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;,结构体数组初始化与引用,结构体数组初始化,例 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 person char name20; int count;leader3=“Li”,0,“Zhang”,0,”Wang“,0; main() int i,j; char 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+; for(i=0;i3;i+) printf(%5s:%dn,leaderi.name,leaderi.count);,指向结构体变量的指针,指向结构体变量的指针定义形式:struct 结构体名 *结构体指针名;例 struct student *p;,使用结构体指针变量引用成员形式,存放结构体变量在内存的起始地址,指向运算符优先级: 1结合方向:从左向右,例 指向结构体的指针变量,main() struct student long int num; char name20; char sex; float score; stu_1,*p; p=,例 int n; int *p= n=10,struct student stu1;struct student *p= (*p).num=101,总结:结构体成员变量引用方式,结构体变量.成员名(*p).成员名p-成员名其中,-称为指向运算符请分析下列几种运算:p-np-n+p-n,指向结构体数组元素的指针,例 指向结构体数组的指针,struct student int num; char name20; char sex; int age;stu3=10101,Li Lin,M,18, 10102,Zhang Fun,M,19, 10104,Wang Min,F,20;main() struct student *p; for(p=stu;pnum,p-name,p-sex,p-age);,结构体变量作为函数参数,用结构体变量的成员作参数-值传递用指向结构体变量或数组的指针作参数-地址传递用结构体变量作参数-多值传递,效率低,链表概述(1),所谓链表是指若干个数据项按一定的原则连接起来。每个数据项都包含有若干个数据和一个指向下一个数据项的指针,依靠这些指针将所有的数据项连接成一个链表。每个数据项称为一个“结点”。,链表概述(2),struct student long num; float score;sturct student *next ;struct student *head;,一个简单链表示例:,链表的基本操作,链表的建立从链尾到链头:新结点插入到链头从链头到链尾:新结点插入到链尾链表的插入操作根据一定的条件,把新结点插入到指定位置链表的删除操作根据一定的条件,删除一个或多个结点链表的输出操作链表的查找操作,建立链表操作(从链尾到链头),head,., head = p;, p = malloc(sizeof (struct node); p-data = ai;, for(i=0; in; i+), p-next = head;,建立链表操作 (从链头到链尾),., p-next = q;, q = malloc(sizeof (struct node); q-data = ai;, for(i=0; in; i+), q-next = NULL;, p = q;,链表的插入操作,.,., p-next = q;, q = malloc(sizeof (struct node); q-data = x;, if(p满足插入条件), q-next = p-next;,链表的删除操作,.,., p-next = q-next;, free(q);, q = p-next;, if(p-next满足删除条件),链表的输出操作,.,., p = p-next;, while(p), printf(%d, p-data);,链表的查找操作,.,., p2=p1;p1=p1-nxet ;, while(num!=p1-num & p1!=NULL ), printf (find: %ld %5.2fn,num,p1-score);,copy,内存动态管理函数,动态分配存储根据需要开辟或释放存储单元相关函数malloc函数calloc函数free函数说明应包含malloc.h或stdlib.h,malloc函数,函数原型typedef unsigned size_t;void *malloc(size_t size);参数size:分配存储空间的字节数返回值若成功,返回指向分配区域起始地址的指针若失败,返回NULL,calloc函数,函数原型void *calloc(size_t n, size_t size);参数n :分配内存的项目数size:分配内存的每个项目的字节数返回值若成功,返回指向分配区域起始地址的指针若失败,返回NULL,free函数,函数原型void free(void *ptr);参数ptr:要释放的内存区地址说明释放prt指向的内存区释放后的内存区能够分配给其他变量使用,realloc函数,函数原型void *realloc(void *ptr,unsigned int size)参数ptr:需要改变存储空间的内存区地址size:将ptr所指的存储区的大小改为size个大小说明用来使已分配的空间ptr改变大小,即重新分配,本章结束,再见!,同学们:,

    注意事项

    本文(C语言ppt课件第9章 结构体与链表.ppt)为本站会员(牧羊曲112)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

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




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开