第11次课--链栈的实现、队列及基本操作共32页

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

新进来的,先出去。
《C语言与数据结构》
第11次课----链栈的实现、队列及基本操作
第8章
队列的概念和特点
➢ 什么是队列? 队列是一种特殊的线性表,它在线性表的一端进
行插入操作,在另一端进行删除操作。 队列中允许插入的一端称为队尾,允许删除的一
端称为队头(首)。 当表中没有元素时称为空队列。
➢ 队列的特点 “先进先出”(First In First Out)
➢ 源程序
看源程序 (11_1)
运行程序 (11_1)
申请一个新的结点空间,用 p 指向它
Biblioteka Baidu
p 为空
内存不足,返回 0 将 x 存入 p 所指的单元中
思考:对于链栈,会不 会出现栈满的情况?
将 p 插入到链首 操作成功,返回 1
《C语言与数据结构》
第11次课----链栈的实现、队列及基本操作
出栈
➢ 流程图
顺序栈
链栈(单链表)
➢ 栈的表示 可以用一个栈顶指针(top)来指示栈顶元素存放的位置,
用一个栈底指针(bottom)来指示栈底元素的存放位置。由 于栈底位置相对不变,通常不用bottom。
《C语言与数据结构》
第11次课----链栈的实现、队列及基本操作
链栈的示意图
(1) 初 始 : to p= N U L L
第11次课----链栈的实现、队列及基本操作
教案
第8章
教学主题
链栈的实现、队列及基本操作
教学目标
通过本次课的学习,使学生掌握链栈的实现 方法、队列的概念及存储方式、顺序队列的实现。
教学重点
1.队列的顺序存储方式 2.顺序队列的基本操作
教学难点 链栈操作的实现
《C语言与数据结构》
第11次课----链栈的实现、队列及基本操作
链队列(单链表)
顺序队列
➢ 队列的表示 可以用一个头指针(front)来指示队首元素存放的位置,
用一个尾指针(rear)来指示队尾元素的存放位置。
《C语言与数据结构》
第11次课----链栈的实现、队列及基本操作
队列的示意图
出 队 a1 a2 a3 a4 a5
图8-7 队 列 示 意 图
➢ 入队的顺序依次为: a1、 a2 、a3 、a4
➢ 出队的顺序依然是: a1、 a2 、a3 、a4
、 a5 、 a5
《C语言与数据结构》
第8章
入 队
第11次课----链栈的实现、队列及基本操作
➢ 为了实时了解队列的情况,还需要有输出队列这 样的操作。
输出队列:显示队列的内容。
《C语言与数据结构》
第11次课----链栈的实现、队列及基本操作
队列的存储
第8章
➢ 回顾:前面介绍的线性表和栈是采用什么方式存储数据的? ➢ 队列与它们一样,也可以采用顺序存储结构(数组)或者 链式存储结构(链表)。
《C语言与数据结构》
第11次课----链栈的实现、队列及基本操作
第8章
队列的基本操作
➢ 队列主要有建队、入队、出队和销毁队列四个基 本操作。
建队:向操作系统申请分配存储单元,用来存储
队列元素,同时初始化队列指针。 入队:在队尾插入元素。 出队:在队首删除元素。 销毁队列:把存储单元归还给操作系统。
➢ 数据结构描述 链栈的类型描述如下:
struct stack_node { Elemtype data;
struct stack_node *next; }; 定义一个指向链栈的栈顶指针: struct stack_node *top; ➢ 源程序
看源程序 (11_1)
运行程序 (11_1)
《C语言与数据结构》
(2) a1 入 栈 后 : top a1 ∧
(3) a2、 a3 入 栈 后 : top a3
(4) 一 个 元 素 出 栈 :
top a2
a2 a1 ∧
a1 ∧
《C语言与数据结构》
第8章
第11次课----链栈的实现、队列及基本操作
链栈的实现
第8章
【例】先建栈,然后输入一个整型元素后入栈,显示栈的内 容。接下来进行出栈操作,再显示栈的内容。最后销毁栈。
➢ 源程序
看源程序 (11_1)
运行程序 (11_1)
栈为空
出栈失败,返回 0
p 指向栈顶元素 将 p 与链表脱钩 将 p 所指的值赋给 x 释放 p 结点的空间 操作成功,返回 1
《C语言与数据结构》
第8章
第11次课----链栈的实现、队列及基本操作
显示栈
第8章
➢ 流程图
➢ 源程序
看源程序 (11_1)
主要内容
第8章
栈 ➢ 栈的回顾 ➢ 链栈的实现 队列 ➢ 队列的概念 ➢ 队列的基本操作 ➢ 队列的存储 ➢ 顺序队列的实现
《C语言与数据结构》
第11次课----链栈的实现、队列及基本操作
第8章
栈的概念和特点
➢ 什么是栈? 栈是一种特殊的线性表,它只在线性表的一端进
行插入和删除操作。 栈中允许插入、删除的这一端称为栈顶,另一个
运行程序 (11_1)
栈为空
显示“栈空”信息
s 指向栈顶 s 不为空
显示 s 结点中的值 S 指向下一个结点
《C语言与数据结构》
第11次课----链栈的实现、队列及基本操作
销毁栈
➢ 分析
只要释放链表中所有结点空间即可。
➢ 流程图
➢ 源程序
s 指向 top
看源程序 (11_1)
top 不为空
top 指向下一个结点
第11次课----链栈的实现、队列及基本操作
建栈
➢ 分析 对于链栈,建栈就是将链表初始化为空表。
➢ 源程序 struct stack_node *init_linkstack() { return NULL; }
第8章
《C语言与数据结构》
第11次课----链栈的实现、队列及基本操作
入栈
第8章
➢ 流程图
固定端称为栈底。 当表中没有元素时称为空栈。
➢ 栈的特点 “先进后出”(First In Last Out)
或“后进先出”(Last In First Out)
《C语言与数据结构》
第11次课----链栈的实现、队列及基本操作
栈的存储
第8章
➢ 回顾:前面介绍的线性表是采用什么方式存储数据的? ➢ 栈与前面介绍过的线性表一样,也可以采用顺序存储结构 (数组)或者链式存储结构(链表)。
运行程序 (11_1)
释放 s 结点空间
第8章
《C语言与数据结构》
第11次课----链栈的实现、队列及基本操作
引例
第8章
➢ 在日常生活中,有一些这样的例子。 例1:在食堂排队买饭,排在队首的买完后走掉,新来的排
在队尾。 例2:在车站排队买票、在银行排队存取款、在商店排队购
物等。 ➢ 请问:上面的例子中有什么共同的特点?
相关文档
最新文档