结构体链表精品课件_第1页
结构体链表精品课件_第2页
结构体链表精品课件_第3页
结构体链表精品课件_第4页
结构体链表精品课件_第5页
已阅读5页,还剩19页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、结构体链表1第1页,共24页,2022年,5月20日,18点56分,星期二例:描述一个学生的姓名、学号、性别、年龄。每个学生都有这样的属性,它们构成一个描述学生具体情况的一个整体。而每个属性又是一个基本的类型,本例中可分别用字符数组、长整型、字符型、和整型来描述。一、结构体类型的定义结构体概念的引入数据的描述:基本类型:整型、实型、字符型。数组:属于同一种类型的元素的集合。有时,需要用不同的数据类型来描述一个事物的各方面属性,故此,C语言引入了结构体的概念。结构体是C语言中的一种构造型数据,它是由不同类型的数据项组成的复合类型。结构体是建造动态数据结构非常有用的工具。如由结构体类型的数据所构成

2、的链表等。 2第2页,共24页,2022年,5月20日,18点56分,星期二struct 结构体类型名 类型标识符 成员名1; 类型标识符 成员名2; 类型标识符 成员名n;;结构体类型的定义如:struct student char name10; long id; char gender; int age;注意: struct student 应作为一个类型整体, name10、id、gender、age都是其成员。 花括号后的“;”不能省。3第3页,共24页,2022年,5月20日,18点56分,星期二定义结构体类型, 描述下列数据 struct student int no; /*学号

3、*/ char name10; /*姓名*/ char sex; /*性别*/ int age; /*年龄*/ float score10; /*成绩*/;结构体类型的举例(1) 学生情况: 包含学生的学号、 姓名、 性别、 年龄、10门课程成绩:4第4页,共24页,2022年,5月20日,18点56分,星期二 (2) 个人数据: 包含姓名、性别、年龄、身高、体重、住址: struct person char name20; /*姓名*/ char sex; /*性别*/ int age; /*年龄*/ float height; /*身高*/ float weight; /*体重*/ cha

4、r addr50; /*住址*/; 5第5页,共24页,2022年,5月20日,18点56分,星期二(3) 平面上的点: struct point2 float x; /*横坐标*/ float y; /*纵坐标*/;如考虑空间中的点, 可作如下定义:struct point3 float x; /*X坐标*/ float y; /*Y坐标*/ float z; /*Z坐标*/; 6第6页,共24页,2022年,5月20日,18点56分,星期二(4) 日期,包括年、月、日:如职工信息结构体类型为:struct personchar name20; /*姓名*/char address40; /

5、*地址*/float salary; /*工资*/float cost; /*扣款*/struct date hiredate; /*聘任日期*/; 结构体类型可以嵌套定义 即一个结构体类型中的某些成员又是其他结构体类型struct date int year; /*年*/ month; /*月*/ day; /*日*/;注意7第7页,共24页,2022年,5月20日,18点56分,星期二例如,对已定义的结构体类型struct student ,可以定义结构体变量: struct student zhang ,stu1; struct person p50; /*50个职工人的数据*/二、结构

6、体变量结构体变量的定义1.先定义结构体类型, 再定义结构体变量格式: struct 结构体名 结构体变量名表;三种方法:8第8页,共24页,2022年,5月20日,18点56分,星期二2.在定义结构体类型的同时定义变量例如:struct student char name10; char sex; int age; float score; stu1,stu2;格式: struct 结构体类型名 类型标识符 成员名1; 类型标识符 成员名2; 类型标识符 成员名n; 变量名表;9第9页,共24页,2022年,5月20日,18点56分,星期二3. 用匿名形式直接定义结构体类型变量(不出现结构体名

7、)例如:struct char name10; char sex; int age; float score; stu1,stu2;格式:struct 类型标示符 成员名1; 类型标示符 成员名2; 类型标示符 成员名n; 变量名表;(1)类型与变量是不同的概念,不要混同。对结构体变量来说,在定义时一般先定义一个结构体类型,然后定义变量为该类型。只能对变量赋值、存取或运算,而不能对一个类型赋值、存取或运算。在编译时,对类型是不分配存储空间的,只对变量分配存储空间。(2)对结构体中的成员,可以单独使用,它的作用相当于普通变量。(3)成员也可以是一个结构体变量。(4)成员名可与程序中的变量同名,两

8、者不代表同一对象。 结构体的说明10第10页,共24页,2022年,5月20日,18点56分,星期二例。定义结构体变量stu1: struct student stu1; stu1.age=20; scanf(%f,&stu1.score);stu1.age 表示引用结构体变量stu1中的age成员,因该成员的类型为int型,所以可以对它执行任何int型变量可以执行的运算。结构体变量的使用结构体变量一般不整体引用,而是引用其成员变量。成员变量引用格式结构体变量名.成员名其中的圆点运算符称为成员运算符,它的运算级别是最高的。11第11页,共24页,2022年,5月20日,18点56分,星期二(1

9、) 结构体类型变量的各成员(分量)必须单独引用,成员运算符“”具有最高优先级。(2) 不允许对结构体变量进行整体的输入输出 如:scanf(“%s%c%d%f”,&stu1); (3) 如果结构体变量类型相同,可以互相赋值。 stu1=stu2; (4) 严格区分类型与变量的概念。 (5) 如果结构体成员本身又是结构体类型的,则可继续使用成员运算符取结构体成员的结构体成员,逐级向下,引用最低一级的成员。程序只能对最低一级的成员进行运算。例如,对stu1某些成员的访问: stu1.birthday.day=23; stu1.birthday.month=8; stu1.birthday.year

10、=1985; 说明12第12页,共24页,2022年,5月20日,18点56分,星期二结构体变量的初始化结构体变量可以在定义时初始化。格式struct 结构体名 成员表; 结构体变量=初始化数据表;例 struct student char name10; char sex; int age; float score; stu1,stu2=“Wangwu”,m,20,88.5;13第13页,共24页,2022年,5月20日,18点56分,星期二stru110001010101110131017name10sexagescore结构体变量存储分配14第14页,共24页,2022年,5月20日,1

11、8点56分,星期二例1 求某同学上学期6门课程的总成绩与平均成绩。 思路分析:可以先构建一个结构体,包含学生的姓名、八门课的成绩、以及总成绩及平均成绩。 struct student char name10; float score6; float total, average; ;然后在程序中输入姓名及各科成绩后即可进行运算,运算结果存放到total和average两个成员变量中。15第15页,共24页,2022年,5月20日,18点56分,星期二main( ) int i; struct student char name10; float score6; float total, ave

12、rage; stu; scanf(%s,); for(i=0;i6;i+) scan(%f,&stu.scorei); stu.total=0; for(i=0;i6;i+) stu.total+=stu.scorei; stu.average=stu.total/6; printf(”%s的总成绩=%.2fn平均成绩=%.2f”, stu.total,stu.average); 输入数据: CHEN 80 86 79 98 88 72 运行结果:CHEN的总成绩=477.00平均成绩= 72.13 程序如下:16第16页,共24页,2022年,5月20日,18点56分,星期二

13、与结构体变量定义类似,只是结构体变量名为结构体数组变量名,如: struct student stu3;数组各元素在内存中连续存放三、结构体数组结构体数组的定义结构体数组的初始化一般形式是在定义的数组后面加上 =初值表列;例。struct student int num; char name20; char sex; int age; float score; char addr30; stu3=101,”WGJ”,M,28,88.5,”CS”, 102,”DYH”,F,26,88.0,”CS”, 103,”DYC”,M,24,78.5,”CZ”;17第17页,共24页,2022年,5月20日

14、,18点56分,星期二101”WGJ”M2888.5”CS”102”DYH”F2688.0”CS”103”DYC”M2478.5”CS”stu0stu1stu2 num name sex age score addrstu0 101 WGJ M 28 88.5 CSstu1 102 DYH F 26 88.0 CSstu2 103 DYC M 24 78.5 CS结构体数组的存储分配18第18页,共24页,2022年,5月20日,18点56分,星期二通过下面的示例说明结构体数组的使用方法例11.2 候选人得票的统计。设有三个候选人,每次输入一个得票的候选人的名字,要求最后输出各人得票结果。结构

15、体数组的使用struct person char name20; int count; leader3=Zhang,0,Li,0,Wang,0;程序如下:19第19页,共24页,2022年,5月20日,18点56分,星期二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,)=0) leaderj.count+; printf(n); for (i=0;i成员名“-”为指向运算符上面示例(*p

16、stu).name,(*pstu).age。可以等价表示为: pstu-name, pstu-age22第22页,共24页,2022年,5月20日,18点56分,星期二A1094 1249 1249 head用指针处理链表 一、链表概述 链表是指将若干个数据项按一定的原则连接起来的表。链表中每一个数据称为节点。链表连接的原则是: 前一个节点指向下一个节点;而且只有通过前一个节点才能找到下一个节点。 链表是一种常见的重要的数据结构。利用它可以实现动态地进行存储分配。 B1021CNull 1094 1021 头指针 - 单向链表结构空地址 第23页,共24页,2022年,5月20日,18点56分,星期二2022/9/2723 a struct stu int num; float scor

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论