第3章栈和队列链队列教学提纲
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
回目录 上一页 下一页 结 束
数据结构
队列的顺序存储结构及实现(顺序队列)
如何解决假溢出?
出队 0 1 2 3 4 入队
a6
a3 a4 a5
rear front
rear
循环队列:将存储队列的数组头尾相接。
不存在物理的循环结构,但可用软件方法实现。 求模:(4+1)mod 5=0
回目录 上一页 下一页 结 束
3.2.3 队列的链式存储结构及其基本实现
循环队列:必须预先确定一个固定的长 度,所以有存储元素个数的限制和空间 浪费的问题。还有队满的情况发生。
回目录 上一页 下一页 结 束
数据结构
队列的链式存储结构及实现(链队列)
链队列:队列的链接存储结构 如何改造单链表实现队列的链接存储?
q
a1
a2
front
• 队空和队满的条件都是 front=rear,如何区分?
front rear
43
0
2 1
43
0
2 1
front
rear front
rear
(a)空队
(e)出队 多次, 队空
E
A
43
D 0 12B
C
front==rear front==rear
(e) 队满回,目录 上一页 下一页
wenku.baidu.com结束
数据结构
怎样区分队空与队满之间的差别呢?在入队时少用一 个数据元素空间,以队尾指针加1等于队首指针判断队满,
数据结构 回目录 上一页 下一页 结 束
数据结构
循环队列首尾相连, 这可以利用除法取余的运算 (%)来实现:
队首指针进1:front=(front+1)%MaxSize 队尾指针进1:rear=(rear+1)%MaxSize
回目录 上一页 下一页 结 束
数据结构
3.2.2 队列的顺序存储结构及其实现--- 问题二
温故知新环节
4号题 循环队列存储在数组A[0…m]中,则 入队时的操作为()
A.rear=rear+1 B.rear=(rear+1)mod(m-1) C.rear=(rear+1)mod m D.rear=(rear+1)mod(m+1)
回目录 上一页 下一页 结 束
数据结构
新语新知环节
3.2 队列
数据结构
温故知新环节 3.2 队列
3.2.1 队列的定义 3.2.2 队列的顺序存储结构及其基本实现
回目录 上一页 下一页 结 束
数据结构
特殊线性表——队列
• 队列的逻辑结构
– 队列:只允许在一端进行插入操作,而另一端 进行删除操作的线性表。
出队
入队
a1 a2 a3
队头
队尾
队列的操作特性: 先进先出
回目录 上一页 下一页 结 束
数据结构
3.2.3 队列的链式存储结构及其基本运算的实现
q
front rear
a
b
c∧
(b)入队 3 个元素
(2) 指向队头和队尾指针的链队头结点
链队中头结点类型LiQueue定义如下:
typedef struct { QNode *front;
QNode *rear;
队头指针即为链表的头指针
an ∧ rear
回目录 上一页 下一页 结 束
数据结构
队列的链式存储结构及实现(链队列)
非空链队列
q
a1
a2
空链队列
front rear
q
∧∧
an ∧ rear
回目录 上一页 下一页 结 束
数据结构
3.2.3 队列的链式存储结构及其基本运算的实现
q front ∧
rear ∧
数据结构
第3章 栈和队列
教学目标 3.1 栈
3.1.1 栈的定义 3.1.2 栈的顺序存储结构及其基本实现 3.1.3 栈的链式存储结构及其基本实现
3.2 队列
3.2.1 队列的定义 3.2.2 队列的顺序存储结构及其基本实现 3.2.3 队列的链式存储结构及其基本实现
本章小结
回目录 上一页 下一页 结 束
(a) 链队初态
q
front rear
a
b
(b) 入队 3 个元素
c∧
q
front rear
b
c∧
(c)出队 1 个元素
链列的入队和出队操作示意图
回目录 上一页 下一页 结 束
数据结构
3.2.3 队列的链式存储结构及其基本运算的实现
q
front rear
a
b
c∧
(1) 存储队列元素的结点数据类型
单链表中数据结点类型QNode定义如下: typedef struct qnode { ElemType data; /*数据元素*/ struct qnode *next; } QNode;
数据结构
温故知新环节
3号题 设栈S和队列Q的初始状态为空,
元素e1,e2,e3,e4,e5,e6依次通过栈S,
一个元素出栈后即进入队列Q,
若6个元素出队的序列是
e2,e4,e3,e6,e5,e1,则栈的
容量至少应该是()
(南京理工)
a) 6
b)4
b) c)3
d)2
回目录 上一页 下一页 结 束
数据结构
/*指向单链表队头结点*/ /*指向单链表队尾结点*/
} LiQueue; 回目录
上一页
下一页
结束
数据结构
(1) 存储队列元素的单链表
单链表中数据结点类型QNode定义如下: typedef struct qnode { ElemType data; /*数据元素*/ struct qnode *next; } QNode;
(2) 指向队头和队尾指针的链队头结点
链队中头结点类型LiQueue定义如下:
typedef struct
{ QNode *front;
/*指向单链表队头结点*/
QNode *rear;
/*指向单链表队尾结点*/
} LiQu回eu目e; 录
上一页
下一页
结束
数据结构
3.2.3 队列的链式存储结构及其基本运算的实现---入
即队满条件为: (q->rear+1) % MaxSize==q->front
队空条件仍为: q->rear==q->front
回目录 上一页 下一页 结 束
数据结构
温故知新环节
1号题
2号题
3号题
4号题
回目录 上一页 下一页 结 束
数据结构
温故知新环节 1号题 栈和队列都是()(南京理工)
a) 顺序存取的线性结构 b) 链式存储的非线性结构 c) 限制存取点的线性结构 d) 限制存取点的非线性结构
回目录 上一页 下一页 结 束
数据结构
温故知新环节
2号题 若用一个大小为6的数组来实现循环 队列,且当前rear和front的值分别为 0和3,当从队列中删除一个元素,再 加入2个元素后,rear和front的值分 别为多少? (浙大) a)1和5 b)2和4 c)4和2 d)5和1
回目录 上一页 下一页 结 束