收藏 分享(赏)

c语言结构体与链表(总结).ppt

上传人:无敌 文档编号:973249 上传时间:2018-05-10 格式:PPT 页数:30 大小:139KB
下载 相关 举报
c语言结构体与链表(总结).ppt_第1页
第1页 / 共30页
c语言结构体与链表(总结).ppt_第2页
第2页 / 共30页
c语言结构体与链表(总结).ppt_第3页
第3页 / 共30页
c语言结构体与链表(总结).ppt_第4页
第4页 / 共30页
c语言结构体与链表(总结).ppt_第5页
第5页 / 共30页
点击查看更多>>
资源描述

1、2018/5/10,C程序设计快速进阶大学教程,1,第12章 自定义数据类型,C程序设计快速进阶大学教程,2018/5/10,C程序设计快速进阶大学教程,2,第12章 自定义数据类型,本章要点结构体链表,2018/5/10,C程序设计快速进阶大学教程,3,12 自定义数据类型,知识点结构体链表枚举类型,2018/5/10,C程序设计快速进阶大学教程,4,12 自定义数据类型,自定义数据类型包括:数组(前面讨论过)结构体共用体(本书不讨论)枚举,2018/5/10,C程序设计快速进阶大学教程,5,12.1 结构体,结构体是一种构造类型,它是由若干成员组成的。每一个成员可以是一个基本数据类型或者又

2、是一个构造类型。 学生:由姓名、身高、成绩等组成,为一个有机整体,2018/5/10,C程序设计快速进阶大学教程,6,12.1.1 结构体声明,声明结构体类型的一般形式为:struct 结构名成员表列;,struct Student int iNum; char cArrName20; char cSex; float fScore;,结构体声明并不分配空间,结构体类型声明是在说明一种数据类型,并非变量定义。,2018/5/10,C程序设计快速进阶大学教程,7,12.1. 2 结构体变量定义,1. 先声明结构体,再定义结构体变量。struct student int iNum; char cA

3、rrName20; char cSex; float fScore;,struct student strStu1, strStu2;,定义结构体变量有以下三种方法:,2018/5/10,C程序设计快速进阶大学教程,8,12.1. 2 结构体变量定义,2. 在声明结构体类型的同时定义结构体变量。struct student int iNum; char cArrName20; char cSex; float fScore;,strStu1, strStu2;,定义结构体变量有以下三种方法:,2018/5/10,C程序设计快速进阶大学教程,9,12.1. 2 结构体变量定义,3. 直接定义结构

4、体变量。struct int iNum; char cArrName20; char cSex; float fScore;,strStu1, strStu2;,定义结构体变量有以下三种方法:,第三种方法与第二种方法的区别在于第三种方法中省去了结构体名,而直接给出结构体变量。这种类型结构体只能用此一次,以后无法再定义该结构体类型变量,即使再声明成员完全相同的结构体类型,也和此次定义的结构体类型属于不同的结构体类型。,2018/5/10,C程序设计快速进阶大学教程,10,12.1. 2 结构体变量定义,结构体变量在内存空间的存储是连续的,结构体类型占用空间的大小sizeof(struct stu

5、dent)的值各成员大小之和29字节(iNum:4字节、cArrName20:20字节、cSex:1字节、fScore:4字节),各编译系统为内存管理方便可能分配的空间大一些。,2018/5/10,C程序设计快速进阶大学教程,11,12.1. 3 结构体变量引用,1. 结构变量初始化和其他类型变量一样,对结构变量可以在定义时进行初始化赋值。struct student int iNum; char cArrName20; char cSex; float fScore;strStu2, strStu1=102,Zhang ping,M,78.5;strStu1、strStu2均被定义为结构变量

6、,并对strStu1作了初始化赋值。,2018/5/10,C程序设计快速进阶大学教程,12,12.1. 3 结构体变量引用,2. 结构体成员引用引用结构变量成员的一般形式是:结构体变量名.成员名.为成员运算符,优先级最高,结合性为自左向右。例如:strStu1.iNum 第一个学生的学号strStu2.cSex 第二个学生的性别如果成员本身又是一个结构体则必须逐级找到最低级的成员才能使用。例如:strStu1.strBirthday.iMonth第一个学生出生的月份成员可以在程序中单独使用,与普通变量完全相同。,2018/5/10,C程序设计快速进阶大学教程,13,12.1. 3 结构体变量引

7、用,3. 结构体变量赋值结构变量之间可以像普通变量一样相互赋值。strStu2=strStu1;会把strStu1内存空间的全部内容复制strStu2对应的空间中。不能对结构体变量整体进行输入、输出、运算。scanf( ,2018/5/10,C程序设计快速进阶大学教程,14,12.1.4 结构体数组,数组的元素也可以是结构体类型的struct Student int iNum; char *pcName; char cSex; float fScore;strStuArr5;,2018/5/10,C程序设计快速进阶大学教程,15,12.1.4 结构体数组,例12.2 对学生表按照成绩从小到大排

8、序#include #include /*声明结构体类型*/struct student int iNum; char *pcName; char cSex; float fScore;int main() /*定义结构体数组*/ struct student strStuArr5= 101,Li ping,M,45,102,Zhang ping,M,62.5,103,He fang,F,92.5,104,Cheng ling,M,87,105,Wang ming,F,58 ;,struct student strStuTemp; int i1,i2,iFlag;for(i1=0;i14;i1

9、+) iFlag=i1;for(i2=i1+1;i25;i2+) if(strStuArri2.fScorestrStuArriFlag.fScore) iFlag=i2; if(iFlag!=i1) strStuTemp=strStuArri1; strStuArri1=strStuArriFlag; strStuArriFlag=strStuTemp; for(i1=0;i1成员名-为指向运算符,优先级最高,结合性为自左向右。两种写法完全一样。(*pStrStudent).iNum或者:pStrStudent-iNum应该注意(*pStrStudent)两侧的括号不可少,因为成员符.的优先

10、级高于*。,2018/5/10,C程序设计快速进阶大学教程,18,12.1.5 结构体与指针,例12.3 通过指针间接访问结构体成员#includestruct student int iNum; char *pcName; char cSex; float fScore;strStu1=102,Zhang ping,M,78.5,*pStrStudent;int main() pStrStudent=,2018/5/10,C程序设计快速进阶大学教程,19,12.1.5 结构体与指针,例12.4 用指针变量输出结构体数组。#includestruct student int iNum; cha

11、r *pcName; char cSex; float fScore;strStuArr5= 101,Zhou ping,M,45,102,Zhang ping,M,62.5, 103,Liou fang,F,92.5, 104,Cheng ling,F,87, 105,Wang ming,M,58 ;int main() struct student *pStrStudent; /*指针指向数组开始*/ pStrStudent=strStuArr; printf(NotNametttSextScoretn); /*通过移动指针访问数组*/ for(pStrStudent=strStuArr;

12、pStrStudentiNum,pStrStudent-pcName,pStrStudent-cSex,pStrStudent-fScore); return 0;,2018/5/10,C程序设计快速进阶大学教程,20,12.2 链表,数组大小编译时决定不适于大小可变情况动态空间运行时申请与释放够用即可,struct student int iNum; float fScore; struct student *pStrNext;,链表的精髓,2018/5/10,C程序设计快速进阶大学教程,21,12.2 链表,链表的基本操作有以下几种:(1) 建立链表;(2) 输出链表 (3) 结点查找;(

13、4) 插入结点;(5) 删除结点;,2018/5/10,C程序设计快速进阶大学教程,22,12.2 链表,例12.5 链表的创建、输出、查找#include /*结点定义*/struct student int iNum; float fScore; struct student *pStrNext;,2018/5/10,C程序设计快速进阶大学教程,23,12.2 链表,例12.5 链表的创建、输出、查找/*创建链表*/struct student * create() struct student *pStrStuHead=0,*pStrStuTemp,*pStrStuTail=0; int

14、 iNumTemp; float fScoreTemp; printf(input num and score(=0, 0) /*申请结点并填入数据,结点的指针域为0,因为新结点将作为最后一个结点*/ pStrStuTemp=(struct student*)malloc(sizeof(struct student); pStrStuTemp-iNum=iNumTemp; pStrStuTemp-fScore=fScoreTemp;pStrStuTemp-pStrNext=0;/*接入链表*/if(!pStrStuHead) /*接入第一个结点,头指针、尾指针均指向该结点*/ pStrStuH

15、ead=pStrStuTail=pStrStuTemp;else /*接入非第一个结点*/ pStrStuTail-pStrNext=pStrStuTemp;/*接在尾指针所指结点之后*/ pStrStuTail=pStrStuTemp;/*尾指针指向新加入结点*/ printf(input num and score(=0, iNum,pStrStuHead-fScore);/*输出*/pStrStuHead=pStrStuHead-pStrNext;/*移动到下一个结点*/ /*查找结点*/struct student *search(struct student *pStrStuTemp

16、,float fScoreTemp) while(pStrStuTemp) if(pStrStuTemp-fScore=fScoreTemp) break;pStrStuTemp=pStrStuTemp-pStrNext;/*移动到下一个结点*/ return pStrStuTemp;,2018/5/10,C程序设计快速进阶大学教程,25,12.2 链表,例12.5 链表的创建、输出、查找int main() struct student strStuTemp; struct student *pStrStuHead,*pStrStuResualt; float fScoreTemp; int

17、 iNumTemp; /*创建链表*/ pStrStuHead=create(); /*输出链表所有结点*/ list(pStrStuHead); /*输入要查找的成绩,然后返回找到结点的地址,找不到返回空*/ printf(input search score:n); scanf(%f,2018/5/10,C程序设计快速进阶大学教程,26,12.3 枚举类型,有些变量的取值被限定在一个有限的范围内。例如,一个星期内只有七天,一年只有十二个月等等。如果把这些量说明为整型,字符型或其它类型显然是不妥当的。 为此,C语言提供了一种称为“枚举”的类型。 枚举类型优点:1.便于理解、见名知义2.节省存

18、储空间枚举类型缺点:1.编程复杂2.程序运行费时间,2018/5/10,C程序设计快速进阶大学教程,27,12.3 枚举类型,1. 枚举类型的声明枚举类型的声明的一般形式为: enum 枚举名 枚举值表; 在枚举值表中罗列出所有可用值,这些值也称为枚举元素。enum weekdaysun,mon,tue,wed,thu,fri,sat; 该枚举名为weekday,枚举值共有7个,即一周中的七天。被说明为weekday类型变量的取值只能是七天中的某一天。,2018/5/10,C程序设计快速进阶大学教程,28,12.3 枚举类型,2. 枚举变量的定义同结构体一样,枚举类型变量也可用不同的方式定义e

19、num weekdaysun,mon,tue,wed,thu,fri,sat ;enum weekday week1,week2,week3;或者为: enum weekdaysun,mon,tue,wed,thu,fri,sat week1,week2,week3;或者为: enumsun,mon,tue,wed,thu,fri,sat week1,week2,week3;,2018/5/10,C程序设计快速进阶大学教程,29,12.3 枚举类型,3. 枚举类型变量的赋值和使用枚举值是一种特殊的常量值,在使用中注意以下几点:(1) 枚举值是常量,不是变量。不能在程序中用赋值语句再对它赋值。例

20、如对枚举类型weekday的元素再作赋值: sun=5;mon=2;sun=mon; 都是错误的。(2) 枚举元素本身由系统定义了一个表示序号的数值,从0 开始顺序定义为0,1,2。如在weekday中,sun序号值为0,mon序号值为1, ,sat序号值为6。(3) 枚举元素不是字符常量也不是字符串常量,使用时不可以加单、双引号。枚举类型变量输出时无法直接输出枚举元素,若需要输出枚举元素,可以用switch语句。,2018/5/10,C程序设计快速进阶大学教程,30,12.3 枚举类型,例12.6 枚举类型输入输出#include enum weekday sun,mon,tue,wed,t

21、hu,fri,sat;int main() int i1; enum weekday enumWeek3; enumWeek0=sun; enumWeek1=mon; enumWeek2=tue; /*输出枚举变量值*/ printf(%d,%d,%dn,enumWeek0,enumWeek1,enumWeek2); /*输出枚举变量元素值*/ for(i1=0;i1=2;i1+) switch(enumWeeki1) case sun:printf(%sn,sun);break; case mon:printf(%sn,mon);break; case tue:printf(%sn,tue);break; case wed:printf(%sn,wed);break; case thu:printf(%sn,thu);break; case fri:printf(%sn,fri);break; case sat:printf(%sn,sat);break; return 0;,程序运行结果:0,1,2sunmontue,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 实用文档 > 工作总结

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报