第9章用户建立的数据类型2.ppt

上传人:本田雅阁 文档编号:3436220 上传时间:2019-08-25 格式:PPT 页数:15 大小:345.54KB
返回 下载 相关 举报
第9章用户建立的数据类型2.ppt_第1页
第1页 / 共15页
第9章用户建立的数据类型2.ppt_第2页
第2页 / 共15页
第9章用户建立的数据类型2.ppt_第3页
第3页 / 共15页
第9章用户建立的数据类型2.ppt_第4页
第4页 / 共15页
第9章用户建立的数据类型2.ppt_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《第9章用户建立的数据类型2.ppt》由会员分享,可在线阅读,更多相关《第9章用户建立的数据类型2.ppt(15页珍藏版)》请在三一文库上搜索。

1、,第9章,用户建立的数据类型,9.4 用指针处理链表,9.4.1 链表概述 链表是一种常见的重要的数据结构,是动 态地进行存储分配的一种结构。 链表的组成: 头指针:存放一个地址,该地址指向一个元素 结点:用户需要的实际数据和链接节点的指针,图11-10,用结构体建立链表的结点(例): struct student int num; float score; struct student *next ;; 其中成员num和score用来存放结点中的有用数据(用 户需要用到的数据),next是指针类型的成员,它指 向struct student类型数据。,图9-11,9.4.2 建立简单的静态链

2、表,例 9.7 建立有3个结点的简单链表,并输出各结点中的数据.,#include #define NULL 0 struct student int num; float score; struct student *next; ; void main(), struct student a,b,c,*head,*p;,p=head;,a. num=99101; a.score=89.5; b. num=99103; b.score=90; c. num=99107; c.score=85;,head=,do printf(“%d %5.1fn“,p-num,p-score); p=p-ne

3、xt; while(p!=NULL); ,9.4.3 建立动态链表,所谓建立动态链表是指在程序执行过程中从无 有地建立起一个链表,即一个一个地开辟结点和 输入各结点数据,并建立起前后相链的关系。 例9.8 写一函数建立一个有3名学生数据的单向动态链表。,建立链表的函数如下: #include #include #define NULL 0 /令NULL代表,用它表示“空地址 #define LEN sizeof(struct student) /令LEN代表struct /student类型数据的长度 struct student int num; float score; struct st

4、udent *next; ; int n; /n为全局变量,本文件模块中各函数均可使用它,struct student *creat( ) struct student *head,*p1,*p2; n=0; p1=p2=(struct student*)malloc(LEN); scanf(“%d%f”,head=NULL; while(p1-num!=0)/学号为0建链表结束 n=n+1; if(n=1)head=p1; else p2-next=p1;/前后结点连接起来 p2=p1; p1=(struct student*)malloc(LEN);/新结点 scanf(“%d%f”, ,

5、p2-next=NULL; return(head); ,NULL,9.4.4 输出链表,首先要知道链表第一个结点的地址,也就是要知道head的 值。然后设一个指针变量p,先指向第一个结点,输出所指的 结点,然后使后移一个结点,再输出,直到链表的尾结点。,例19 编写一个输出链表的函数print. void print(struct student *head) struct student *p; printf(“nNow,These %d records are:n“,n); p=head; if(head!=NULL) do printf(“%ld %5.1fn“,p-num,p-sco

6、re); p=p-next; while(p!=NULL); ,9.5 共用体,9.5.1. 什么是共用体 使几个不同的变量共占同一段内存的结构称为 “共用体”类型的结构。一般形式为:,union 共用体名 成员表列 变量表列;,例如: union data union data int i; int i; char ch; 或 char ch; float f; float f; a,b,c; ; union data a,b,c;,变量a的存储示意图:,共用体和结构体的比较: 结构体变量所占内存长度是各成员占的内存长度之和。每个成员分别占有其自己的内存单元。 共用体变量所占的内存长度等于最

7、长的成员的长度。,例如: 上面定义的“共用体”变量、各占 个字节(因为一个实型变量占个字节),而不 是各占个字节。,2. 共用体变量的引用方式 只能引用共用体变量中的成员:,例如:前面定义了a、b、c为共用体变量 a.i (引用共用体变量中的整型变量) a.ch(引用共用体变量中的字符变量) a.f (引用共用体变量中的实型变量),3. 共用体类型数据的特点 (P271) (1) 同一个内存段可以用来存放几种不同类型的成员,但在每一瞬时只能存放其中一种,而不是同时存放几种。 (2) 共用体变量中起作用的成员是最后一次存放的成员,在存入一个新的成员后原有的成员就失去作用。 共用体变量的地址和它的

8、各成员的地址都是同一地址。 不能对共用体变量名赋值, 不能把共用体变量作为函数参数, 共用体类型可以出现在结构体类型定义中,也可以定义共用体数组。反之,,例9.10 设有若干个人员的数据,其中有学生和教师。学生的数据中包括:姓名、号码、性别、职业、班级。教师的数据包括:姓名、号码、性别、职业、职务。可以看出,学生和教师所包含的数据是不同的。现要求把它们放在同一表格中。,9.6 枚举类型,枚举:将变量的值一一列举出来,变量的值只 限于列举出来的值的范围内。 声明枚举类型用enum,例如,下面是定义名为 weekday的枚举类型: enum weekdaysun,mon,tue,wed,thu,f

9、ri,sat; 定义枚举类型的变量: enum weekday workday,week-day; 或: enum weekday sun,mon,tue,wed,thu,fri,sat workday,week-day; 则workday,week-day的变量值只能是sun到sat之一 。,9.7 用typedef 命名类型,用typedef声明新的类型名来代替已有的类型名。 例1. 声明INTEGER为整型 typedef int INTEGER 例2. 声明结构类型 typedef struct int month; int day; int year; DATE; 从而可以这样定义变量: INTEGER i,j; DATE birthday,*p;,

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

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1