第3章 栈和队列(二) 1/.

Slides:



Advertisements
Similar presentations
數學社群 教學分享 和平國小 陳淑渟老師 數學社群 教學分享 和平國小 陳淑渟老師. 小一常發生的 學習困難 定位板的應用 序數的學習 困難與教學 突破 主題大綱.
Advertisements

next 漳州市华侨中学 林女珍 next 以生活为基础提炼而成的程式性动作,和虚拟性 的空 间处理。着重运用讲究唱、做、念、打艺术, 表演动作富于舞蹈性,技术性很高。 戏曲是中国传统的戏剧形式 早在原始社会歌舞已有萌芽,在漫长发展的过程 中,经过八百多年不断地丰富、革新与发展,才 逐渐形成比较完整的戏曲艺术.
健康.安全年 製作 : 黃靜怡. 安全第一,我想,這是一句大家都耳熟能詳的話吧,說安全, 簡單的說,就是注意自己、眼睛要看、耳朵要聽,不要莽莽 撞撞的,安全是大家所期望的,而父母總是常常掛念我們, 就是希望我們能安全,畢竟,孩子是父母一輩子的牽掛,會 擔心我們的,往往就是關心我們的人,每個人都希望自己做.
【大願文教基金會】園藝治療師 黃盛璘督導、王麗玲執行. 年齡在 2 足歲以上 18 歲以下,經醫學中 心或區域醫 院鑑定為 重度、極重度 身心障礙,不具行動能 力、且不能自理生活,並持有身心障礙 手冊的新北市居民。 八里愛心教養院~服務對象.
第二十九课 致儿子书 张之洞.
如何陪伴孩子度過 高三歲月.
把人的生命写在教育的旗帜上 了解一个案件 欣赏一篇散文 学习一种理念 感悟一个故事.
六大原因造成 現代人身體酸性化.
迷 宫 最短路径 施沈翔.
【2008年高考重庆卷】A.当冰雪皑皑之际,唯独梅花昂然绽放于枝头,对生命充满希望和自信,教人精神为之一振。
景区讲解常用方法.
班級愛心小護士訓練 臺南市東區勝利國小 健康中心.
项目四 营业税 山东经贸职业学院 财政金融系.
敬业·创业·乐业 ——我的成长之路 赵谦翔.
中國醫藥大學 北港分部簡報.
数据结构——树和二叉树 1/96.
第六章 树和二叉树.
第二章 线性表 1 线性表的逻辑结构及其基本操作 2 线性表的顺序存储结构 3 线性表的链式存储结构 4 静态链表 5 应用实例.
全面推廣政府服務流程改造 行政院研究發展考核委員會  主任委員 宋餘俠 102年7月17日.
歡樂大派對 六年七班 第一組 自然成果發表會.
第三章 堆疊與佇列的基本應用 3-1 簡介堆疊(Stack) 3-2 迷宮問題研究 3-3 佇列(queue)的介紹
Linked List Operations
第3章 栈和队列 3.1 栈 3.2 队列 3.3 应用.
單向鏈結串列 Singly Linked Lists.
第2章 线性表 线性结构 是一个数据元素的有序集合。.
第6章 佇列(Queues) 6-1 佇列的基礎 6-2 佇列的表示法 6-3 環狀佇列 6-4 雙佇列.
佇列 (Queue).
資料結構 第5章 佇列.
Ch.3 栈和队列 黄刘生 中国科学技术大学计算机系 国家高性能计算中心(合肥)
线性表小结 元素之间的线性关系 顺序表 顺序表:元素相邻存储 单链表:后继指针链接 一维数组 给定下标随机存取
cn/~dongeliu/dsa.html 刘 东 信息学院6系 中国科学技术大学
第2章 线性表 线性表抽象数据类型 顺序表 主要知识点 单链表 循环单链表 循环双向链表 静态链表 设计举例.
第十章 C高级程序应用—链表* 10.1链表的基本概念 10.2单向链表 10.3双向链表 10.4应用举例.
第5章 堆疊(Stacks) 5-1 堆疊的基礎 5-2 堆疊的表示法 5-3 堆疊的應用 - 運算式的計算與轉換
第5章 堆疊(Stacks) 5-1 堆疊的基礎 5-2 堆疊的表示法 5-3 堆疊的應用 - 運算式的計算與轉換
进程操作.
第3章 堆栈和队列 堆栈 堆栈应用 队列 队列应用 优先级队列 主要知识点.
第 3 讲 线性表(一).
第三章 栈与队列 £3.1 栈 £3.3 队列 £3.2 栈的应用举例 £3.1.1 栈的定义 £3.1.2 栈的顺序存储结构
第三章 栈和队列 3.1 栈 3.2 栈的应用举例 3.3 栈与递归的实现 3.4 队列.
第3章 栈和队列(一).
第三章 栈和队列.
数据结构 Data Structure 中南大学 主讲人:王国军,郑瑾 中南大学信息院计科系
第二章 线性表.
資料結構與C++程式設計進階 堆疊與佇列(Stack & Queue) 講師:林業峻 CSIE, NTU 6/ 21, 2010.
第一章 绪论.
陈海明 副教授 信息学院 计算机系 电子信息类非计算机专业选修课 程序设计实践 陈海明 副教授 信息学院 计算机系
内容回顾 线性表的定义和特点 线性表的顺序存储及查找、插入和删除.
栈和队列练习.
第三章 栈和队列.
#define STACK_INIT_SIZE 10
第四章串 4.1 串类型定义 4.2 串的表示和实现 4.3 串的模式匹配算法 4.4 串操作应用举例.
資料結構 第4章 堆疊.
严蔚敏、吴伟民编著 清华大学出版社 学习网站:
陈海明 副教授 信息学院 计算机系 电子信息类非计算机专业选修课 程序设计实践 陈海明 副教授 信息学院 计算机系
王玲 第 2 章 线性表 王玲 2019/2/25.
第三章 栈和队列 第二部分 队列(Queue) 2019/4/8.
常宝宝 北京大学计算机科学与技术系 数据结构(三) 常宝宝 北京大学计算机科学与技术系
債之標的 楊智傑.
Linked Lists Prof. Michael Tsai 2013/3/12.
Chap2 Stack & Queue.
第四章 栈和队列 栈 ( Stack ) 队列 ( Queue ) 优先队列 (Priority Queue) 小结.
本教學投影片係屬教科書著作之延伸,亦受著作權法之保護。
第二章 线性表.
第 六 讲 栈和队列(一).
第1章 数据结构基础概论 本章主要介绍以下内容 数据结构研究的主要内容 数据结构中涉及的基本概念 算法的概念、描述方法以及评价标准.
第七讲 栈和队列(二) 1/.
Chapter 2 Entity-Relationship Model
本节内容 1.二叉排序树的定义 2.二叉排序树的查找操作 3.二叉排序树的插入操作 4.二叉排序树的删除操作 5.二叉排序树的总结
第六章 直接成本法.
Presentation transcript:

第3章 栈和队列(二) 1/

内容回顾 栈的定义及特点 顺序栈的类型定义 顺序栈进栈操作int Push( SqStack *S, SElemType e) 顺序栈出栈操作 链栈与链表的区别 2/

队列 教学目标 教学内容 掌握队列的定义和特点 掌握队列的存储结构及其基本操作实现 队列的定义 循环队列—队列的顺序表示和实现 链队列—队列的链式表示和实现 3/ 计算机科学与技术系 信息与教育技术中心

1.队列的定义 定义 特点 队列是只允许在表的一端进行插入,在表的另一端进行删除的线性表。 队尾(rear)——允许插入的一端 队头(front)——允许删除的一端 特点 先进先出(FIFO, First In First Out) 4/

1.队列的定义 双端队列 a1 a2 a3…………………….an 入队 出队 front rear 队列Q=(a1,a2,……,an) 端1 端2 入队 出队 5/

练习 设栈S和队列Q的初始状态为空,元素e1、e2、e3、e4、e5和e6依次通过S,一个元素出栈后即进入Q,若6个元素出队的序列是e2、e4、e3、e6、e5和e1,则栈S的容量至少应该是( )。 B (A)2 (B)3 (C)4 (D)6 2018年12月4日

1.队列的定义 队列的基本操作 构造空队列 入队 出队 取队头元素 判队列是否为空 置空队 队列的抽象数据类型定义 P73 7/

2.循环队列——队列的顺序表示和实现 队列的顺序存储结构 #define MAXQSIZE 100 //最大长度 Typedef struct { QElemType *base; //初始化的动态分配存储空间 int front; //头指针 int rear; //尾指针 }SqQueue; 2018年12月4日

2.循环队列——队列的顺序表示和实现 队头和队尾指针在队列初始化时均置为指向数组空间的下界 —0。 队头指针指向当前队头元素。 队尾指针指向当前队尾元素的下一个位置。 9/

2.循环队列——队列的顺序表示和实现 SqQueue Q; Q.rear 1 2 3 4 5 1 2 3 4 5 J1 J2 J3 1 2 3 4 5 J1 J2 J3 Q.rear 1 2 3 4 5 1 2 3 4 5 J6 J5 Q.rear Q.front J4 Q.front J3 J2 Q.front=0 Q.rear=0 Q.front J1 队空 J1,J2,J3入队 J1,J2,J3出队 J4,J5,J6入队 10/

2.循环队列——队列的顺序表示和实现 存在问题 解决方案 设数组长度为M,则: 循环队列 当Q.front=0, Q.rear=M-1时,再有元素入队发生溢出——真溢出 当Q.front0,Q.rear=M-1时,再有元素入队发生溢出——假溢出 解决方案 循环队列 基本思想:把队列设想成环形,让Q.base[0]接在Q .base[M-1]之后,若Q. rear+1==M,则令Q. rear=0; 11/

2.循环队列——队列的顺序表示和实现 实现 利用“模”运算 入队: Q .base[Q. rear]=x; Q. rear=(Q. rear+1)%M; 出队: x=Q .base [Q. front]; Q. front=(Q. front+1)%M; 队满、队空判定条件 M-1 1 Q. front Q. rear …... 12/

队满:(Q. rear+1)%M== Q. front 队空: Q. front== Q. rear 队满: Q. front== Q. rear 1 2 3 4 5 Q. rear Q. front J4 J5 J6 1 2 3 4 5 Q. rear Q. front 初始状态 J4,J5,J6出队 J7,J8,J9入队 J4 J5 J6 1 2 3 4 5 Q. rear Q. front J9 J8 J7 解决方案: 1.另外设一个标志以区别队空、队满 2.少用一个元素空间: 队空: Q. front== Q. rear 队满:(Q. rear+1)%M== Q. front 13/

2.循环队列——队列的顺序表示和实现 初始化空队列 Status InitQueue(SqQueue *Q){ Q->base=(QElemType *)malloc(MAXQSIZE *sizeof(QElemType)); if(!Q->base) exit(OVERFLOW); Q->front = Q->rear = 0; return OK; } 14/

2.循环队列——队列的顺序表示和实现 Status EnQueue(SqQueue *Q,QElemType e) { 入队算法 if( (Q->rear+1)%MAXQSIZE == Q->front ) // 队列满 return ERROR; Q->base[Q->rear] = e; Q->rear=(Q->rear+1)%MAXQSIZE; return OK;} 15/

2.循环队列——队列的顺序表示和实现 出队算法 Status DeQueue(SqQueue *Q, QElemType *e) { if(Q->front == Q->rear) // 队列空 return ERROR; * e = Q->base[Q->front]; Q->front = (Q->front+1)%MAXQSIZE; return OK; } 16/

2.循环队列——队列的顺序表示和实现 求队列长度算法 int QueueLength(SqQueue Q) { return (Q.rear-Q.front+MAXQSIZE)%MAXQSIZE; } 17/

3.链队列—队列的链式表示与实现 队列的链式存储结构简称为链队列,它是限制仅在表头删除和表尾插入的单链表。 显然仅有单链表的头指针不便于在表尾做插入操作,为此再增加一个尾指针,指向链表的最后一个结点。 18/

. data next 队头 队尾 Q.front Q.rear 19/

3.链队列—队列的链式表示与实现 队列的链式存储结构 typedef struct QNode{ typedef struct{ QElemType data; struct QNode *next; } QNode ,*QueuePtr; typedef struct{ QueuePtr front; QueuePtr rear; }LinkQueue; 20/

3.链队列—队列的链式表示与实现 链队列是否需要头结点? 如何判断队空? 为了操作的方便,在链队列中也添加一个头结点,并使队头指针指向头结点。 如何判断队空? 队空条件为 Q.front == Q.rear 链队列在进队时无队满问题 21/

3.链队列—队列的链式表示与实现 队列 初始化操作 Status InitQueue(LinkQueue *Q){ if( !(Q->front=Q->rear=(QueuePtr)malloc (sizeof(QNode)))); exit(OVERFLOW); Q.front->next=NULL; return OK; } 空队列 22/

3.链队列—队列的链式表示与实现 入队列操作 元素x入队列 元素y入队列 Status EnQueue(LinkQueue *Q, QElemType e){ QueuePtr p; if( !(p=(QueuePtr)malloc(sizeof(QNode))) ) exit(OVERFLOW); p->data = e; p->next = NULL; Q->rear->next = p; Q->rear = p; return OK; } 元素x入队列 元素y入队列 23/

3.链队列—队列的链式表示与实现 出队列操作 Status DeQueue(LinkQueue *Q, QElemType *e) { QueuePtr p; if( Q->front == Q->rear ) return ERROR; p = Q->front->next; e = p->data; Q->front->next = p->next; if(Q->rear == p) Q->rear = Q->front; free(p); return OK; } 元素x出队列 元素y出队列 24/

3.链队列—队列的链式表示与实现 队列判空操作 Status QueueEmpty(LinkQueue Q) { if(Q.front == Q.rear) return TRUE; else return FALSE; } 空队列 25/

小结 队列的定义及特点 循环队列结构类型定义及基本操作(初始化、入队、出队、求长度) 链式存储结构类型定义及基本操作 26/

作业 设用一个单向循环链表来表示队列(也称链式循环队列),该队列只设一个队尾指针rear,不设队头指针front,要求设计出该队列的初始化、入队列和出队列操作。 实验三:队列的操作及应用 27/