第六章 复合数据类型2-结构体PPT课件

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

st[3]
2A14H 2AE0H
struct student *p=st;
:
:
for(p=st;k<st+30;p++)
printf(“%d,%s”,p->num, p->name);
例11.3 结构指针应用举例
• 11.1.6.3 结构指针作为函数的参数
结构类型指针作为函数的参数可以实现从函数返回多个值。
C语言程序设计
历史回顾
概念 指针变量 数组的指针及其指针变量 字符串指针和字符串指针变量 函数的指针及函数的指针变量 函数返回指针 指针数组和二级指针
第十一讲
结构体
问题
如何处理更复杂的数据呢? 什么结构体呢? 结构体有哪些特点?
主要内容
结构体 链表 共用体 枚举类型 类型别名 位运算、位域
11.1 结构体
例11. 4
struct person
{ char *name; / *pp子函数给结构的各成员赋值*/
int nq;
void pp( )
float s;
struct person *y;
};
{ y->name=“gongdajszh”;
main( )
y->nq=100;y->s=35.8;
{ void pp( );
成员运算符:. ->
例如:age=2005 - st1.birthday.year; • 允许将一结构体变量的所有分量赋予同类的另一变量。
例如:st2=st1;
• 例11. 1
11.1.5 结构体数组
• 以某结构体类型也可以定义数组
struct student { int num;
char name[30]; char sex; float score; } stu[30]; 每个下标变量stu[i] 都有结构体类型 student 的各个分量; 下标变量的引用同变量。
• 结构体类型不是存储数据的实体,即系统并不是给它分配内 存,它仅是一种数据类型,与int, char 类似,用来定义一种 数据类型的变量;
• 结构体类型变量才是存储数据的实体,结构体变量的分量具 体分配存储单元,等价于一组变量。因此我们引用的是结构 体变量。
• 引用结构体变量只能通过引用结构体变量的分量(成员)实 现(在I/O时,赋值时等)。 例如:sum=st1.score+st2.score;
name st1
sex
} st1,st2,st3;
score
struct student *p=&st1;
:
printf(“%d,%s”, st1.num, st2.name);
printf(“%d,%s”, (*p).num, (*p).name);
printf(“%d,%s”, p->num, p->name);
• 插入结点
• 例11. 2 结构数组应用举例
11.1.6 结构体类的指针
• 11.1.6.1 指向结构体类变量的指针
指向结构体类变量的指针就是该变量所占用的
内存区段的首址。 例: struct student { int num;
: num
char name[3]; char sex; float score;
2A00H
• 11.1.6.2 指向结构体类数组的指针
指向结构体类数组的指针就是该数组所占用的
内存区段的首址。
例: struct student { int num;
: st[0]
2A00H
char name[3];
st[1]
2A0AH
char sex;
float score;
st[2]
} st[30]={……};
}
struct person x;
pp(&x);
printf(“name:%s\n”,x.name);
printf(“nq:%d\ts=%f\n”,x.nq,x.s); }
11.2 链表
11.2 Leabharlann Baidu表
• 什么是链表?
线性表:有限个元素的有序集合。可用数组或链表表 示。 数组和链表两 者都逻辑连续,数组在存储空间 连续,但链表可以在存储空间不连续。 动态数据结构:其大小可变;动态分配存储空间。链 表是最简单的一种,属于线性动态数据结构,树是非 线性动态数据结构。 链表:链表中的一个元素称为一个结点或节点。每个 结点由两部分组成:数据部分、指向上下结点的指针。 靠这样的指针把各个结点串联起来构成链表。分单向、 双向链表,后者可以两方向连接。
结构体变量 st2
11.1.2 定义结构体的类型
• 定义结构体类型
• 一般形式:
struct [ 结构体类型名] { 分量1;
[分量2;] [分量3;]
: }[结构变量名表];
分量:<类型标示符> <变量|复合数据结构> 分量又称域或成员。 当分量是结构体时,形成定义时的嵌套。
注意:“结构类型名”和“结构变量名表”,最多可 省略一个。
• 定义结构体变量
三种形式:
1. 定义结构体的同时定义 例如前页例。
2. 先定义结构体,后定义结构体变量 例:struct stu
{ …. };
….
struct stu st1,st2; 3. 直接定义
例:struct { …. }变量名表;
在struct 后不出现结构体类型名
11.1.4 结构体变量的引用
单向链表
0
双向链表
0
0
• 为什么使用链表?
1)不需要连续存储空间,可利用内存碎片; 2)插入删除元素不需移动其它元素,处理速度快; 3)动态分配存储空间,不必以最大可能长度预定 存储空间,且可以随意扩充表的容量。
• 用结构体及结构体指针构造链表和链表操作
1)建立链表 2)输出链表 3)插入结点 4)删除结点
11.1.1 结构体概述
• 记录型数据与结构体 一组相关的不同数据类型的数据项,可作一个整体来 处理。PASCAL中称“记录型”数据,C中称结构体 类型数据。下例中定义了结构体类型student和结构体 变量stu1,stu2。前者是数据类型,后者是变量。
结构体类型 student
结构体变量 st1
例:
struct student { int num;
char name[20]; char sex; struct date birthday; float score; } stu1, stu2;
struct date { int month;
int day; int year; };
11.1.3 定义结构体的变量
相关文档
最新文档