当前位置:高等教育资讯网  >  中国高校课件下载中心  >  大学文库  >  浏览文档

重庆邮电大学:《C语言程序设计》第17讲 共用体&链表(谢竞博)

资源类别:文库,文档格式:PPT,文档页数:19,文件大小:206KB,团购合买
一、如何定义数据类型存储下列表格中的数据
点击下载完整版文档(PPT)

第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; }

点击下载完整版文档(PPT)VIP每日下载上限内不扣除下载券和下载次数;
按次数下载不扣除下载券;
24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
共19页,试读已结束,阅读完整版请下载
相关文档

关于我们|帮助中心|下载说明|相关软件|意见反馈|联系我们

Copyright © 2008-现在 cucdc.com 高等教育资讯网 版权所有