最新结构体与链表

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

p
q
r
head link
link
link
Data-1 Data-2 Data-3
NULL
节点插入和删除
• 两个标准库函数(在malloc.h 中)
–void *malloc(unsigned int size) 从堆中分配大小为 size 的存储空间,在插入
节点时必须的操作(具体见教材)。 –void free(void *p) 释放 p 指向的节点到堆中,在删除节点时需
原来的链(不含数据节点t)
head
link
link link NULL
Data-1 Data-2 Data-3
在原数据节点2和3之间要新增数据节点t: 假定数据节点2和3 分别由指针 p 和 r 指示,待插数据节点t 由 q 指示; 则,新增操作为: q->link=r; p->link=q;
p
q
r
结构体与链表
• 结构体和指针 存放结构体变量在内存的起始地址
–指向结构体变量的指针
• 定义形式:struct 结构体名 *结构体指针名;
例 struct student *p;
struct student { int num;
p num
char name[20]; char sex;
name
stu
例 INTEGER a,b,c; REAL f1,f2;
说明: 1.typedef 没有创造新数据类型 2.typedef 是定义类型,不能定义变量 3.typedef 与 define 不同
int a,b,c; float f1,f2;
define 预编译时处理 简单字符置换
typedef 编译时处理 为已有类型命名
GROUP *pclub; struct club *pclub;
期末考试要点
• 卷面总分:100
– 计算机基础(25分左右) – C 语言程序设计(75分左右)
• 最终成绩计算:
– 上机(20%)+作业(10%)+期中(10%)+ 期末(60%)
考试要点(续)
• 内容:全部讲授的内容 • 题型:
Hale Waihona Puke Baidu
– typedef定义类型步骤
按定义变量方法先写出定义体 如 int i;
将变量名换成新类型名
如 int INTEGER;
最前面加typedef
如 typedef int INTEGER;
用新类型名定义变量
如 INTEGER i,j;
例 定义数组类型 int a[100]; int ARRAY[100]; typedef int ARRAY[100]; ARRAY a,b,c;
p
r
head link Data-1 q link
link Data-3
Data-2
NULL
• 减少节点(删除)
原来的链
head
link Data-1
link link Data-2 Data-3
NULL
删除原来链中的数据节点2的操作: p->link=r; 释放q 所指的节点:free(q); //见下面解释
head link
link
link
link
Data-1 Data-2 Data-t Data-3
NULL
• 调整节点位置
原来的链
p
q
r
head link
link
link
Data-1 Data-2 Data-3
NULL
调整原来链中的数据节点2和数据节点3的位置(实际上不一定相邻): q->link=r->link; p->link=r; r->link=q;
• 单向链表通常有一个头指针,用于指向链表头; • 单向链表有一个尾节点,该节点的指针部分指
向一个空节点,空节点表示为 NULL
head
link
link
data
data
link NULL data
• 链表是由节点构成的,因此,关键就是定义节 点。
• 链表的节点定义打破了先定义再使用的限制, 即,可以用自己定义自己(回想递归函数的定 义也违反了先定义再使用的限制)。
sex
int age;
age
}stu;
struct student *p=&stu;
(main)
a :27
b: 3
arg
c :30
(main) a :27 b: 3 c :30
(func)
****
arg parm
(main) a :18 b: 5 c :90
(func)
****
arg parm
例 定义结构体类型 struct date { int month; int day; int year; } d;
例 定义结构体类型 typedef struct date
{ int month; int day; int year;
}DATE;
例 定义结构体类型 struct date { int month; int day; int year; }DATE;
要的操作。
• 用typedef定义类型
– 功能:用自定义名字为已有数据类型命名 – 类型定义简单形式: typedef type name;
类型定义语句关键字
已有数据类型名
例 typedef int INTEGER;
用户定义的类型名
例 typedef int INTEGER; typedef float REAL;
例 定义结构体类型 DATE birthday, *p;
– 类型定义可嵌套
例 typedef struct club { char name[20]; int size; int year; }GROUP; typedef GROUP *PG; PG pclub;
GROUP为结构体类型 PG为指向GROUP的指针类型
• 例子
#define NULL 0 struct student {
long num float score; struct student *link; }
用 struct student 本 身说明成员 *link
• 链表的特点:动态性
– 节点可以根据需要增加或减少(插入/删除) – 节点的位置可以调整
(main)
a :18
b: 5
arg
c :90
链表—指针与结构的综合
• 链表是程序设计中一种重要的动态数据结构, 动态性体现为:
–链表中的元素个数可以根据需要增加和减少,不像 数组,在声明之后就固定不变;
–元素的位置可以变化,即可以从某个位置删除,然 后再插入到一个新的地方;
• 链表中的元素称为“节点”,每个节点包括两 个大的部分:数据部分和指向其它节点的指针;
相关文档
最新文档