《数据结构》课程PPT教学课件(2012)第3章 栈和队列 3.2 队列(Queue)

第三章栈和队列 3.1 栈 (Stack) 3.2 队列 (Queue) 1, 定义 1.定义 2.逻辑结构 2.逻辑结构 3.存储结构 3.存储结构 4.运算规则 4.运算规则 5.实现方式 5.实现方式
1 3.1 栈(Stack) 第三章 栈和队列 3.2 队列(Queue) 1. 定义 2. 逻辑结构 3. 存储结构 4. 运算规则 5. 实现方式 1. 定义 2. 逻辑结构 3. 存储结构 4. 运算规则 5. 实现方式

32队列 尾部插 队列定义 只能在表的一端进行插入运算, 在表的另一 端进行删除运算的线性表。 首部删 逻辑结构 与线性表相同,仍为一对一关系。 存储结构 顺序队或链队, 以循环顺序队更常见。 运算规则 只能在队首和队尾运算,且访问结点时依照 先进先出(FIFO)的原则。 实现方式 关键是掌握入队和出队操作,具体实现依顺 序队或链队的不同而不同。 基本操作:入队或出队,建空队列,判队空或队满等操作
2 与线性表相同,仍为一对一关系。 顺序队或链队,以循环顺序队更常见。 只能在队首和队尾运算,且访问结点时依照 先进先出(FIFO)的原则。 关键是掌握入队和出队操作,具体实现依顺 序队或链队的不同而不同。 只能在表的一端进行插入运算,在表的另一 端进行删除运算的线性表。 基本操作:入队或出队,建空队列,判队空或队满等操作。 尾部插 入 首部删 除

队列(Queue)是仅在表尾进行插入操作,在表头进行删除操 作的线性表。它是一种先进先出(FIFO)的线性表。 例如: 队列Q=(aa2,a3,an以, an 队首 队尾 在队尾插入元素称为入队;在队首删除元素称为出队。 问:为什么要设计队列?它有什么独特用途? 答:1.离散事件的模拟(模拟事件发生的先后顺序,例如 CPU芯片中的指令译码队列); 2.操作系统中的作业调度(二个CPU执行多个作业); 3.简化程序设计
3 队列 (Queue)是仅在表尾进行插入操作,在表头进行删除操 作的线性表。它是一种先进先出(FIFO)的线性表。 例如:队列 Q= (a1 , a2 , a3 , .,an-1 , an ) 在队尾插入元素称为 ;在队首删除元素称为 。 队首 队尾 问:为什么要设计队列?它有什么独特用途? 1. 离散事件的模拟(模拟事件发生的先后顺序,例如 CPU芯片中的指令译码队列); 2. 操作系统中的作业调度(一个CPU执行多个作业); 3. 简化程序设计。 答:

队的实现方式是本节重点,关键是掌握入队和出队操作。 具体实现依存储结构(链队或顺序队)的不同而不同。 1.链队列 2.顺序队 重点是循环 顺序队 队的抽象数据类型定义: ADT Queue{ 数据对象: D=, 建队、入队或出队、判队空 数据关系: R=. 或队满等,教材P59-60罗列 基本操作: 了9种基本操作。 0。e0 ADT Queue
4 关键是掌握入队和出队操作。 具体实现依存储结构(链队或顺序队)的不同而不同。 2. 队的抽象数据类型定义: ADT Queue{ 数据对象:D=. 数据关系:R=. 基本操作: . } ADT Queue 建队、入队或出队、判队空 或队满等,教材P59-60罗列 了9种基本操作。 重点是循环 顺序队

1.链队列 因简单而先介绍 链队列类型定义: 关于整个链队的 typedef struct 总体描述 QueuePtr front;W队首指针 QueuePtr rear;/队尾指针 }LinkQueue; 链队中任一 结点的结构 结点类型定义: typedef Struct QNode{ QElemType data; //元素 Struct QNode*next;/指向下一结点的指针 }Qnode,QueuePtr
5 链队列类型定义: typedef struct { QueuePtr front ; //队首指针 QueuePtr rear ; //队尾指针 } LinkQueue; 结点类型定义: typedef Struct QNode{ QElemType data; //元素 Struct QNode *next; //指向下一结点的指针 }Qnode , * QueuePtr ; 关于整个链队的 总体描述 链队中任一 结点的结构 因简单而先介绍

链队示意图: rear front al 2日 a3 (队首) (队尾) 讨论: front rear ①空链队的特征?front=rear ②链队会满吗?一般不会,因为删除时有free动作。除非内存不足! ③怎样实现链队的入队和出队操作? 完整操作函数 入队(尾部插入):rear->next-S;rear=S; 见教材P62下 出队(头部删除):front->next=p->next;
6 讨论: ① 空链队的特征? Q (队首) (队尾) front a1 a2 a3 ^ rear p front ^ rear ③ 怎样实现链队的入队和出队操作? ② 链队会满吗? front=rear 一般不会,因为删除时有free动作。除非内存不足! 入队(尾部插入):rear->next=S; rear=S; 出队(头部删除):front->next=p->next; S D ^ 链队示意图: 完整操作函数 见教材P62下

2.顺序队 关于整个顺序 顺序队类型定义: 队的总体描述 #define QUEUE-MAXSIZE100/最大队列长度 typedef struct QElemType *base; //队列的基址 int front; /队首指针 int rear; //队尾指针 SqQueue 顺序队中每个结点的结构描述在此省略,是QElemType类型。 建队核心语句: q.base=(QElemType *)malloc(sizeof (QElemType OUEUE MAXSIZE): /川分配空间 采用动态分配空 间的形式
7 采用动态分配空 间的形式 顺序队类型定义: 建队核心语句: q . base=(QElemType *)malloc(sizeof (QElemType ) * QUEUE_MAXSIZE); //分配空间 关于整个顺序 队的总体描述 #define QUEUE-MAXSIZE 100 //最大队列长度 typedef struct { QElemType *base; //队列的基址 int front; //队首指针 int rear; //队尾指针 }SqQueue 顺序队中每个结点的结构描述在此省略,是QElemType类型

顺序队示意图: 用base做数组名 讨论: data front ①空队列的特征? 约定:front=rear al (队首) ②队列会满吗? a2 极易装满!因为数组通 a3 常有长度限制,而其前 端空间无法释放。 rear a4 (队尾) 队尾后地址 ③怎样实现入队和出队 99 操作?核心语句如下: 入队(尾部插入):Q[rear=e;rear++; 有缺 假溢出! 出队(头部删除):e=Qfront];front+-+; 陷
8 Q (队尾) (队首) front a1 a2 a3 data a4 0 . . . . . . .99 rear ② 队列会满吗? 极易装满!因为数组通 常有长度限制,而其前 端空间无法释放。 ① 空队列的特征? 约定:front=rear 队尾后地址 入队(尾部插入): Q[rear]=e; rear++ ; 出队(头部删除): e=Q[front]; front++; 讨论: 有 缺 陷 ③ 怎样实现入队和出队 操作?核心语句如下: 用base做数组名 e 顺序队示意图:

问:什么叫“假溢出”?如何解决? 答:在顺序队中,当尾指针已经到了数组的 上界,不能再有入队操作,但其实数组中还 有空位置,这就叫“假溢出” 解决假溢出的途径 采用循环队列
9 解决假溢出的途径———采用循环队列 答:在顺序队中,当尾指针已经到了数组的 上界,不能再有入队操作,但其实数组中还 有空位置,这就叫“假溢出” 。 问:什么叫“假溢出” ?如何解决?

顺序队列0 循环队列(臆造) N1 0 front al 3 a2 front a3 al 2 rear→ rear a3 a2 N-1 新问题:在循环队列中,空队特征是front=rear; 队满时也会有 front-戶rear;判决条件将出现工义性! 解决方案有三: ①使用一个计数器记录队列中元素个数(即队列长度); ②加设标志位,删除时置1,插入时置0,则可识别当前front戶rear属于何种情况 ③人为浪费一个单元,则队满特征可改为front=-(rear+1)%N;
10 a3 a2 a1 0 1 2 3 N-1 rear front 新问题:在循环队列中,空队特征是front=rear;队满时也会有 front=rear;判决条件将出现二义性! 解决方案有三: ①使用一个计数器记录队列中元素个数(即队列长度); ②加设标志位,删除时置1,插入时置0,则可识别当前front=rear属于何种情况 ③ 人为浪费一个单元,则队满特征可改为front=(rear+1)%N; a3 a2 a1 front rear 0 1 2 3 . . N-1
按次数下载不扣除下载券;
注册用户24小时内重复下载只扣除一次;
顺序:VIP每日次数-->可用次数-->下载券;
- 《数据结构》课程PPT教学课件(2012)第3章 栈和队列 3.3.ppt
- 《数据结构》课程PPT教学课件(2012)第4章 串 String(1/2).ppt
- 《数据结构》课程PPT教学课件(2012)第6章 树和二叉树 Tree & Binary Tree(1/4).ppt
- 《数据结构》课程PPT教学课件(2012)第5章 数组和广义表 Arrays & Lists(1/2).ppt
- 《数据结构》课程PPT教学课件(2012)第5章 数组和广义表 Arrays & Lists(2/2).ppt
- 《数据结构》课程PPT教学课件(2012)第4章 串 String(2/2).ppt
- 《数据结构》课程PPT教学课件(2012)第7章 图(1/3).ppt
- 《数据结构》课程PPT教学课件(2012)第6章 树和二叉树 Tree & Binary Tree(4/4).ppt
- 《数据结构》课程PPT教学课件(2012)第6章 树和二叉树 Tree & Binary Tree(3/4).ppt
- 《数据结构》课程PPT教学课件(2012)第7章 图(2/3).ppt
- 《数据结构》课程PPT教学课件(2012)第9章 查找 9.1 基本概念 9.2 静态查找表.ppt
- 《数据结构》课程PPT教学课件(2012)第9章 查找 9.3 动态查找表 9.4 哈希查找表.ppt
- 《数据结构》课程PPT教学课件(2012)第7章 图(3/3).ppt
- 《数据结构》课程PPT教学课件(2012)总复习.ppt
- 《数据结构》课程教学资源(试卷习题)数据结构考研试题集锦(共十一章,含参考答案).pdf
- 《数据结构》课程教学资源(试卷习题)计算机网络考研试题题库(含答案).pdf
- 《数据结构》课程教学资源(试卷习题)数据结构试题及答案.doc
- 《数据结构》课程教学资源(教案设计)11 快速排序.doc
- 《数据结构》课程教学资源(教案设计)10 静态查找.doc
- 《数据结构》课程教学资源(教案设计)09 关键路径.doc
- 《数据结构》课程PPT教学课件(2012)第3章 栈和队列 3.1 栈(Stack).ppt
- 《数据结构》课程PPT教学课件(2012)第2章 线性表 2.4 应用举例.ppt
- 《数据结构》课程PPT教学课件(2012)第2章 线性表 2.3 线性表的链式表示和实现 2.3.1 链表的表示.ppt
- 《数据结构》课程PPT教学课件(2012)第2章 线性表 2.3 线性表的链式表示和实现 2.3.2 链表的实现.ppt
- 《数据结构》课程PPT教学课件(2012)第2章 线性表 2.1 线性表的逻辑结构 2.2 线性表的顺序表示和实现.ppt
- 《数据结构》课程PPT教学课件(2012)第1章 绪论 Data Structure(石河子大学:高攀).ppt
- 《数据结构》课程PPT教学课件(2012)第10章 内部排序 10.1 概述.ppt
- 《数据结构》课程PPT教学课件(2012)第10章 内部排序 10.5 归并排序 10.6 基数排序(Radix Sort).ppt
- 《数据结构》课程PPT教学课件(2012)第10章 内部排序 10.2 插入排序 10.3 交换排序 10.4 选择排序.ppt
- 《数据结构》课程PPT教学课件(2015)第7章 图(下).ppt
- 《数据结构》课程PPT教学课件(2015)第10章 内部排序(下).ppt
- 《数据结构》课程PPT教学课件(2015)第9章 查找.ppt
- 《数据结构》课程PPT教学课件(2015)第10章 内部排序(上).ppt
- 《数据结构》课程PPT教学课件(2015)第6章 树和二叉树(上).ppt
- 《数据结构》课程PPT教学课件(2015)第6章 树和二叉树(下).ppt
- 《数据结构》课程PPT教学课件(2015)第6章 树和二叉树(中).ppt
- 《数据结构》课程PPT教学课件(2015)第7章 图(上).ppt
- 《数据结构》课程PPT教学课件(2015)第4章 串.ppt
- 《数据结构》课程PPT教学课件(2015)第5章 数组.ppt
- 《数据结构》课程PPT教学课件(2015)第3章 栈和队列(下).ppt