重庆邮电大学:《C语言程序设计》课程PPT教学课件(讲稿)第17讲 共用体&链表

第17讲 共用体 链表
第17讲 共用体 链表

如何定义数据类型存储下需要一个数据 表格中的数据 单元,但不同 情况下存不同 的数据。 姓名 年龄工作 所在办公室 name age ob (或班级 class) 共用体类型 教师计算机基础教学部 union DEPT 学生0600001 fruct person union DEPT char name[10] t int class; Int age char office[10] char job :/先定义共用体类型*/ union DEPt struct person t int class; [char name[10] char office[10] Int agei 3 depa: char job union DEPT depa;
2 如何定义数据类型存储下列 表格中的数据 姓名 name 年龄 age 所在办公室office 工作 job (或班级class) struct person {char name[10]; int age; char job; depa; }; •需要一个数据 单元,但不同 情况下存不同 的数据。 李四 21 学生 0600001 张三 30 教师 计算机基础教学部 union DEPT { int class; char office[10]; } union DEPT { int class; char office[10]; };/*先定义共用体类型*/ struct person {char name[10]; int age; char job; union DEPT depa; }; •共用体类型 union DEPT

include struct person i char name[10]: 例6-41 Int age char job union dEpt printf nName Age Job Classoffice \n") for(i=0; i<4; i++) 币f(ps[]job==s)输出的时候同样先判断,再决定输出什么 printf("%-10s%-6d%-3c%-10dn" ps[i]. name, ps[i] age, ps[i]. job, ps[i]. depa. class) else printf("%-10s%-6d%-3c%-10sMn" ps[i]. name, ps[i] age, ps[i]. job, ps[i]. depa. office) scanfc %od, &ps[i]. depa. class); else if(ps[i]. job==t) scanfc %s", ps[i]. depa. office)
3 #include struct person { char name[10]; int age; char job; union DEPT { int class; char office[10]; }depa; }; void main() { struct person ps[4]; int n,i; for(i=0;i<4;i++) {scanf("%s %d %c",ps[i].name,&ps[i].age,&ps[i].job); if(ps[i].job==‘s’) /*要先判断job是什么,然后决定存什么*/ scanf("%d",&ps[i].depa.class); else if(ps[i].job=='t') scanf("%s", ps[i].depa.office); } 例6-41 printf("\nName Age Job Class/office\n"); for(i=0;i<4;i++) { if(ps[i].job==‘s’)/*输出的时候同样先判断,再决定输出什么*/ printf("%-10s%-6d%-3c%-10d\n", ps[i].name, ps[i].age,ps[i].job,ps[i].depa.class); else printf("%-10s%-6d%-3c%-10s\n", ps[i].name,ps[i].age,ps[i].job,ps[i].depa.office); } }

共用体类型数据的特点 union example short x: 0F15 ax ach[O] char ch[4]: OF16 0F17 0F18 a ch[3] 在内存中: sizeof( unIon X)取决于占空间最多的那个成 员变量 2ax和ach处于同样的地址 3同一内存单元在每一时刻只能存放一个成员的值;
4 共用体类型数据的特点 ▪ union example { short x; char ch[4]; }a; a.ch[0] a.ch[1] a.ch[2] a.ch[3] a.x 0F15 0F16 0F17 0F18 ◼在内存中: 1.sizeof(union xxx)取决于占空间最多的那个成 员变量 2.a.x和a.ch处于同样的地址 3.同一内存单元在每一时刻只能存放一个成员的值;

例6-40读取16位整型数据的高字节数据 Include i=0x3833:/换算成二进制为001110000110011*/ rinf( \n) printf"c[o]=%d, c[1]=%d\n,r c[o],s->c[1D
5 例6-40 读取16位整型数据的高字节数据 #include union data { short i; char c[2]; };/*这种类型的变量可以看成一个整型变量,也可以看成 两个字符型变量,字符型变量对应的ASCII码即对应整 型数的高、低字节*/ typedef union data DATA; void main() { DATA r,*s=&r; s->i=0x3833; /*换算成二进制为00111000 00110011 */ printf("\n"); printf("c[0]=%d,c[1]=%d\n",r.c[0],s->c[1]); } 00110011 00111000 r.c [0] r.c[1] 0F15 r.i 0F16

问题:数组有何缺点? 数组必须占据连续内存,在数组元素的 插入或删除时,费时费力。 数组的长度从定义起就固定不变。如果 数据元素的个数不可预知时,就要将数 组定义得足够大以备不时之需,这就会 造成空间的浪费;此外,数组一经定义 就占据内存,直至程序结束
6 问题:数组有何缺点? ▪ 数组必须占据连续内存,在数组元素的 插入或删除时,费时费力。 ▪ 数组的长度从定义起就固定不变。如果 数据元素的个数不可预知时,就要将数 组定义得足够大以备不时之需,这就会 造成空间的浪费;此外,数组一经定义 就占据内存,直至程序结束

引入链表的原因 最主要的是插入、删除操作的灵活性 能够根据需要灵活申请和释放内存空间。 缺点? head data next data next datanet data NULL data next 7
7 引入链表的原因 ▪ 最主要的是插入、删除操作的灵活性 ▪ 能够根据需要灵活申请和释放内存空间。 ▪ 缺点? head data next data next data next data NULL data next

链表 种数据结构:用顺序、不连续的内存空间 存储数据。 链表中每个节点的数据类型( Linked tab|e) struct link [int data struct Link * next head I data next data ne xth data next data NULL 8
8 链表 ▪ 一种数据结构:用顺序、不连续的内存空间 存储数据。 ▪ 链表中每个节点的数据类型(Linked table) struct Link { int data; struct Link *next; } head data next data next data next data NULL

例8-22创建链表并存入数据 算法: 循环执行下列操作: 1、创建新节点 1、申请一个节点所用的内存; 2、向该节点存入数据; 2、将该节点链入链表尾部; struct student char num[10]: float score struct student☆next :/每个节点的数据类型*
9 例8-22 创建链表并存入数据 ▪ 算法: ▪ 循环执行下列操作: 1、创建新节点 1、申请一个节点所用的内存; 2、向该节点存入数据; 2、将该节点链入链表尾部; struct student { char num[10]; float score; struct student *next; };/*每个节点的数据类型*/

创建一个新节点 struct student"CreateNodeo struct student*p: p=( struct link)mdlc( sizeof( struct link):/^动态申请一段 内存 i印(==NULL)/申请失败,打印错误信息,退出程序* printf"No enough memory to alloc") exit(o) /*结束整个程序的运行* /*为新建节点赋值* p->next=NULL:⌒新建的节点指针域赋空指针*/ printf"please input number:");/*为新建的节点数据区赋值*/ gets(p->num): printf( please input score: ) scanfC %od", &p->score) printf("\n successful create a new node! ): eturn P 10
10 创建一个新节点 struct student *CreateNode() { struct student *p; p = (struct Link *)malloc(sizeof(struct Link)); /* 动态申请一段 内存 */ if(p == NULL) /* 申请失败,打印错误信息,退出程序 */ { printf("No enough memory to alloc"); exit(0); /*结束整个程序的运行*/ } /*为新建节点赋值*/ p->next = NULL;/* 新建的节点指针域赋空指针 */ printf(“please input number:”); /* 为新建的节点数据区赋值 */ gets(p->num); printf(“please input score:”); scanf(“%d”,&p->score); printf("\n successful create a new node!"); return p; }
按次数下载不扣除下载券;
注册用户24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
- 重庆邮电大学:《C语言程序设计》课程PPT教学课件(讲稿)第16讲 动态内存分配&结构体.ppt
- 重庆邮电大学:《C语言程序设计》课程PPT教学课件(讲稿)第15讲 二维数组与指针.ppt
- 重庆邮电大学:《C语言程序设计》课程PPT教学课件(讲稿)第14讲 二维数组、二维数组做函数参数.ppt
- 重庆邮电大学:《C语言程序设计》课程PPT教学课件(讲稿)第13讲 指针与一维数组.ppt
- 重庆邮电大学:《C语言程序设计》课程PPT教学课件(讲稿)习题7.ppt
- 重庆邮电大学:《C语言程序设计》课程作业讲评-goldbahe猜想.doc
- 重庆邮电大学:《C语言程序设计》课程PPT教学课件(讲稿)第11讲 数组与指针.ppt
- 重庆邮电大学:《C语言程序设计》课程PPT教学课件(讲稿)第10讲 一维数组与字符数组.ppt
- 中国民航大学电子信息工程学院:《MATLAB程序设计与应用》课程教学资源(PPT课件讲稿)第七章 符号计算.ppt
- 中国民航大学电子信息工程学院:《MATLAB程序设计与应用》课程教学资源(PPT课件讲稿)第六章 数值计算_matlab8.ppt
- 中国民航大学电子信息工程学院:《MATLAB程序设计与应用》课程教学资源(PPT课件讲稿)第五章 M文件(主讲:卢丹).ppt
- 中国民航大学电子信息工程学院:《MATLAB程序设计与应用》课程教学资源(PPT课件讲稿)第四章 数据和函数的可视化.ppt
- 中国民航大学电子信息工程学院:《MATLAB程序设计与应用》课程教学资源(PPT课件讲稿)第三章 字符串数组、元胞数组和构架数组.ppt
- 中国民航大学电子信息工程学院:《MATLAB程序设计与应用》课程教学资源(PPT课件讲稿)第二章 数值数组及其运算(2/2).ppt
- 中国民航大学电子信息工程学院:《MATLAB程序设计与应用》课程教学资源(PPT课件讲稿)第二章 数值数组及其运算(1/2).ppt
- 中国民航大学电子信息工程学院:《MATLAB程序设计与应用》课程教学资源(PPT课件讲稿)第一章 MATLAB基础准备及入门(2/2).ppt
- 中国民航大学电子信息工程学院:《MATLAB程序设计与应用》课程教学资源(PPT课件讲稿)第一章 MATLAB基础准备及入门(1/2).ppt
- 人民邮电出版社:《3ds max 7.0案例教程》第9章 灯光与摄像机.ppt
- 人民邮电出版社:《3ds max 7.0案例教程》第8章 材质的编辑和使用.ppt
- 人民邮电出版社:《3ds max 7.0案例教程》第7章 面片与NURBS建模.ppt
- 重庆邮电大学:《C语言程序设计》课程PPT教学课件(讲稿)第18讲 文件.ppt
- 重庆邮电大学:《C语言程序设计》课程PPT教学课件(讲稿)第1讲 简介与hello world.ppt
- 重庆邮电大学:《C语言程序设计》课程PPT教学课件(讲稿)第20讲 位运算讲、位段、枚举变量、大型程序开发.ppt
- 重庆邮电大学:《C语言程序设计》课程PPT教学课件(讲稿)第2讲 简单C程序设计.ppt
- 重庆邮电大学:《C语言程序设计》课程PPT教学课件(讲稿)第3讲 多函数程序设计.ppt
- 重庆邮电大学:《C语言程序设计》课程PPT教学课件(讲稿)第4讲 作用域和选择结构程序设计.ppt
- 重庆邮电大学:《C语言程序设计》课程PPT教学课件(讲稿)第5讲 多分支和循环.ppt
- 重庆邮电大学:《C语言程序设计》课程PPT教学课件(讲稿)第6讲 循环和综合程序设计.ppt
- 重庆邮电大学:《C语言程序设计》课程PPT教学课件(讲稿)第7讲 综合程序设计.ppt
- 重庆邮电大学:《C语言程序设计》课程PPT教学课件(讲稿)第8讲 模块化程序设计.ppt
- 重庆邮电大学:《C语言程序设计》课程PPT教学课件(讲稿)第9讲 存储类型 宏定义 数组.ppt
- 重庆邮电大学:《C语言程序设计》课程授课计划一.doc
- 重庆邮电大学:《C语言程序设计》课程授课计划二.doc
- 湖南农业大学:《计算机组成原理教案》第二章 数据格式(蒋邵平).ppt
- 湖南农业大学:《计算机组成原理教案》第六章 总线的基本概念(蒋邵平).ppt
- 湖南农业大学:《计算机组成原理教案》第七章 显示器(蒋邵平).ppt
- 湖南农业大学:《计算机组成原理教案》第三章 存储系统(蒋邵平).ppt
- 湖南农业大学:《计算机组成原理教案》第五章 中央处理器(蒋邵平).ppt
- 湖南农业大学:《计算机组成原理教案》第一章 计算机系统概论(蒋邵平).ppt
- 北京理工大学:《Java导论与Java开发环境》课程教学资源(学生作业)面向对象文档.doc