資料結構 第5章 佇列.

Slides:



Advertisements
Similar presentations
迷 宫 最短路径 施沈翔.
Advertisements

動畫與遊戲設計 Data structure and artificial intelligent
数据结构概论 第2章 线性表 董黎刚 浙江工商大学信电学院
第三章 鏈結串列 Linked List.
计算机硕士专业基础—C语言 赵海英
数据结构——树和二叉树 1/96.
第二章 线性表 1 线性表的逻辑结构及其基本操作 2 线性表的顺序存储结构 3 线性表的链式存储结构 4 静态链表 5 应用实例.
資料結構與C++程式設計進階 資料結構概論 講師:林業峻 CSIE, NTU 6/ 7, 2010.
Chapter 3.0 C語言的結構與指標 資料結構導論 - C語言實作.
第三章 堆疊與佇列的基本應用 3-1 簡介堆疊(Stack) 3-2 迷宮問題研究 3-3 佇列(queue)的介紹
第4章 鏈結串列(Linked Lists) 4-1 動態記憶體配置-(6) 4-2 鏈結串列的基礎-(7)
Linked List Operations
第3章 栈和队列 3.1 栈 3.2 队列 3.3 应用.
單向鏈結串列 Singly Linked Lists.
第2章 线性表 线性结构 是一个数据元素的有序集合。.
第6章 佇列(Queues) 6-1 佇列的基礎 6-2 佇列的表示法 6-3 環狀佇列 6-4 雙佇列.
C语言程序设计 第十二章 位运算.
程式設計 博碩文化出版發行.
佇列 (Queue).
4.4 佇列 特徵: c b a c b d c b 新增 d 刪除 入口 入口 入口 尾端(rear) 尾端(rear) 尾端(rear)
Chap 3 堆疊與佇列 Stack and Queue.
补充内容 结构体 概述 定义结构体类型和定义结构体变量 结构体变量的引用 结构体变量的初始化 指针与结构体 用typedef定义类型的别名.
第五章 数组和 广义表 数组 稀疏矩阵 广义表.
·线性表的定义及ADT ·线性表的顺序存储结构 ·线性表的链接存储结构 · 单向循环链表 · 双链表、双向循环链表 · 一元多项式的加法
第12章 樹狀搜尋結構 (Search Trees)
第十五章 Linked List, Stack and Queue
Ch.3 栈和队列 黄刘生 中国科学技术大学计算机系 国家高性能计算中心(合肥)
cn/~dongeliu/dsa.html 刘 东 信息学院6系 中国科学技术大学
第3章 栈和队列(二) 1/.
第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.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.
第一章 绪论.
五、链 表 1、单链表 2、双向链表 3、链表应用.
陈海明 副教授 信息学院 计算机系 电子信息类非计算机专业选修课 程序设计实践 陈海明 副教授 信息学院 计算机系
栈和队列练习.
第9章 内部排序 9.1 概述 9.2 插入排序 9.3 快速排序 9.4 选择排序 9.5 归并排序 9.6 基数排序
佇列(queue) Lai Ah Fur.
第三章 栈和队列.
資料結構 第4章 堆疊.
严蔚敏、吴伟民编著 清华大学出版社 学习网站:
第四章 堆疊與佇列 課前指引 資料結構學科中,堆疊(Stack)與佇列是兩種相當典型的抽象資料型態,也是一種有特定進出規則的線性串列應用,主要特性是限制了資料插入與刪除的位置和方法。本章中將會介紹堆疊與佇列的概念與特性,及在計算機領域的各種相關應用。
樹 2 Michael Tsai 2013/3/26.
Chapter6 队列(Queues) The Abstract Data Type
陈海明 副教授 信息学院 计算机系 电子信息类非计算机专业选修课 程序设计实践 陈海明 副教授 信息学院 计算机系
樱花和富士山.
自我參考結構 (self-reference – 1)
第三章 链表 单链表 循环链表 多项式及其相加 双向链表 稀疏矩阵.
常宝宝 北京大学计算机科学与技术系 数据结构(三) 常宝宝 北京大学计算机科学与技术系
top b top a a top 空栈 a 进栈 b 进栈 top top e e e top d d d c c c b b b a a
Linked Lists Prof. Michael Tsai 2013/3/12.
第7章 樹與二元樹(Trees and Binary Trees)
第四章 栈和队列 栈 ( Stack ) 队列 ( Queue ) 优先队列 (Priority Queue) 小结.
本教學投影片係屬教科書著作之延伸,亦受著作權法之保護。
第 六 讲 栈和队列(一).
本节内容 指针类型.
第4章 鏈結串列(Linked Lists) 4-1 動態記憶體配置-(6) 4-2 鏈結串列的基礎-(7)
多重條件選擇敘述
Chapter 2 Entity-Relationship Model
第7章 图.
题目详细要求、参考资料及更新发布于: 第二周 链表与指针 题目详细要求、参考资料及更新发布于:
本节内容 指针类型 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
Presentation transcript:

資料結構 第5章 佇列

5-1 認識佇列 佇列 (queue) 是一個線性串列,兩端分別稱為前端 (front) 與後端 (rear),當要新增資料時,必須放入佇列的後端,當要刪除資料時,必須從佇列的前端開始。

5-2 佇列的實作 5-2-1 使用陣列實作佇列 #define MAX_SIZE 6 typedef struct que{ 5-2 佇列的實作 5-2-1 使用陣列實作佇列 #define MAX_SIZE 6 typedef struct que{ char data[MAX_SIZE]; int front; int rear; }queue; queue Q; Q.front = -1; Q.rear = -1;

佇列應該要提供下列運算: 判斷佇列已滿 (isFull) 判斷佇列已空 (isEmpty) enqueue或新增 (add) enqueue(queue *Q, char value) { if (Q->rear == (MAX_SIZE - 1)) printf("佇列已滿!"); else Q->data[++Q->rear] = value; } dequeue或刪除 (delete) dequeue(queue *Q) if (Q->front == Q->rear) printf("佇列已空!"); */ else printf("%c ", Q->data[++Q->front]);

假設佇列的最大長度為6,依序新增A、B、C、D等四個資料,然後刪除兩個資料,再新增E、F、G等三個資料,則變數front、rear的值與佇列的內容如下:

enqueue() 函數必須改寫成如下,以適用於環狀佇列: queue Q; Q.front = 0; Q.rear = 0; enqueue(queue *Q, char value) { if ((Q->rear + 1) % MAX_SIZE == Q->front) printf("佇列已滿!"); else{ Q->rear = (Q->rear + 1) % MAX_SIZE; Q->data[Q->rear] = value; }

dequeue() 函數必須改寫成如下,以適用於環狀佇列 : dequeue(queue *Q) { if (Q->front == Q->rear) printf("佇列已空!"); else{ Q->front = (Q->front + 1) % MAX_SIZE; printf("%c ", Q->data[Q->front]); }

前面的例子改成環狀佇列後,佇列的內容如下:

5-2-2 使用鏈結串列實作佇列 typedef struct node{ int data; struct node *next; 5-2-2 使用鏈結串列實作佇列 typedef struct node{ int data; struct node *next; }list_node; typedef list_node *list_pointer; list_pointer front, rear;

若要新增資料,必須將資料放入佇列的後端,如下圖所示:

若要刪除資料,必須從佇列的前端開始,如下圖所示:

範例5.1:[enqueue] 根據本節宣告的單向鏈結串列,撰寫一個函數實作佇列的新增資料運算。 enqueue(int value) { list_pointer ptr; ptr = (list_pointer)malloc(sizeof(list_node)); ptr->data = value; ptr->next = NULL; if (rear == NULL) front = ptr; else rear->next = ptr; rear = ptr; }

範例5.2:[dequeue] 根據本節宣告的單向鏈結串列,撰寫一個函數實作佇列的刪除資料運算。 { list_pointer ptr; if (front == NULL) printf("佇列已空!"); else{ printf("%d ", front->data); ptr = front; front = front->next; free(ptr); }

5-3 雙向佇列 #define MAX_SIZE 100 typedef struct deq{ char data[MAX_SIZE]; 5-3 雙向佇列 #define MAX_SIZE 100 typedef struct deq{ char data[MAX_SIZE]; int frontL; int rearL; int frontR; int rearR; }deque; queue Q; Q.frontL = -1; Q.rearL = -1; Q.frontR = MAX_SIZE; Q.rearR = MAX_SIZE;

雙向佇列應該要提供下列運算: 判斷雙向佇列已滿 (isFull) 判斷雙向佇列已空 (isEmpty) enqueueL enqueueR dequeueL dequeueR

在雙向佇列內新增資料或刪除資料: