本次课内容:动态存储分配、链表 教学目的:掌握相关概念、函数和链表的基本操作。 重点:动态存储分配方法,链表的基本操作(建、插、 删) 难点:链表的基本操作(建、插、删)。 预习: 结构体类型定义,变量定义和成员引用; 指向结构体类型变量的指针; 结构体类型的嵌套定义
本次课内容:动态存储分配、链表 教学目的:掌握相关概念、函数和链表的基本操作。 重点:动态存储分配方法,链表的基本操作(建、插、 删)。 难点:链表的基本操作(建、插、删)。 预习: 结构体类型定义,变量定义和成员引用; 指向结构体类型变量的指针; 结构体类型的嵌套定义
简单单向链表举例 结点构成 结点 mum学号 数据域 score 成绩 next下一学生数据地址 指针域 head 3010 3010 89101 结点 89.5 3028 头指针 3028 89102 结点结构定义: 90.5 struct stud score 4016 4016 89105 long num; float score, 4048 4048 struct stud score *next 89018 94.5 NULL
简单单向链表举例: num score *next 学号 成绩 下一学生数据地址 3010 head 3010 3028 4016 4048 89101 89102 89105 89018 89.5 90.5 91 94.5 3028 4016 4048 NULL 结点 头指针 数据域 指针域 结点 结点构成 结点结构定义: struct stud_score { long num; float score; struct stud_score *next; };
、动态存储分配和链表概念 1、动态存储分配 根据需要临时分配存储单元用于存放数据,当数据 不用时,又可随时释放存储单元。 2、链表 若干数据按一定的原则连接起来 原则:前一个结点指向下一个结点,通过前一个结 点找到下一个结点。 结点构成:数据域和指针域。 结点:一组数据或一个记录。 头指针:用head(一般情况下)表示的首结点地 址 NULL(尾结点指针域值):符号常量,值为0 般表示不指向任何一个数据。 基本操作 (1)建立链表 (2)插入结点 (3)删除结点
一、动态存储分配和链表概念 1、动态存储分配 根据需要临时分配存储单元用于存放数据,当数据 不用时,又可随时释放存储单元。 2、链表 若干数据按一定的原则连接起来。 原则:前一个结点指向下一个结点,通过前一个结 点找到下一个结点。 结点构成:数据域和指针域。 结点:一组数据或一个记录。 头指针:用head(一般情况下)表示的首结点地 址。 NULL(尾结点指针域值):符号常量,值为0 一般表示不指向任何一个数据。 基本操作: (1)建立链表 (2)插入结点 (3)删除结点
插入结点: 3028 4016 89102 89105 90.5 340+原4016 4048 1340 89103 92.5 4016 删除结点: 3028 4016 89102 89105 90.5 4016 1340 4048 原1340 89103 92.5 点虽仍指向下一结点, 4016 此结点已无法访问
插入结点: 删除结点: 1340 89103 92.5 4016 3028 89102 90.5 1340 4016 89105 91 4048 3028 89102 90.5 4016 1340 89103 92.5 4016 4016 89105 91 4048 原4016 原1340 结点虽仍指向下一结点, 但此结点已无法访问。 89103 92.5 4016
结点构成: 数据域:若干不同类型变量 指针域:一个或多个指针类型变量 结点定义方法:定义包含指针项的结构体变量,结构 体成员中至少有一个指向该结构体类型的指针成员。 如: struct stud score long num; float score: struct stud score *next. }; 其中:*next是指向该类型的指针成员。用于存放该结 构体类型数据的首地址。 struct stud score *next;是嵌套定义
结点构成: 数据域:若干不同类型变量 指针域:一个或多个指针类型变量 结点定义方法:定义包含指针项的结构体变量,结构 体成员中至少有一个指向该结构体类型的指针成员。 如: struct stud_score { long num; float score; struct stud_score *next; }; 其中:*next是指向该类型的指针成员。用于存放该结 构体类型数据的首地址。 struct stud_score *next; 是嵌套定义