第三章栈和队列 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 ; 关于整个链队的 总体描述 链队中任一 结点的结构 因简单而先介绍