4 堆疊與佇列 4.1 前言 四種基本的資料結構 (可儲存資料的容器) 陣列 (Array)、串列(List): 最基本

Slides:



Advertisements
Similar presentations
6-1 指標簡介 6-2 指標與陣列 6-3 動態配置記憶體 6-4 本章綜合練習
Advertisements

布林代數的應用--- 全及項(最小項)和全或項(最大項)展開式
第七章 抽樣與抽樣分配 蒐集統計資料最常見的方式是抽查。這 牽涉到兩個問題: 抽出的樣本是否具有代表性?是否能反應出母體的特徵?
: A-Sequence 星級 : ★★☆☆☆ 題組: Online-judge.uva.es PROBLEM SET Volume CIX 題號: Problem D : A-Sequence 解題者:薛祖淵 解題日期: 2006 年 2 月 21 日 題意:一開始先輸入一個.
:Word Morphing ★★☆☆☆ 題組: Problem Set Archive with Online Judge 題號: 10508:word morphing 解題者:楊家豪 解題日期: 2006 年 5 月 21 日 題意: 第一行給你兩個正整數, 第一個代表下面會出現幾個字串,
1 Q10276: Hanoi Tower Troubles Again! 星級 : ★★★ 題組: Online-judge.uva.es PROBLEM SET Volume CII 題號: Q10276: Hanoi Tower Troubles Again! 解題者:薛祖淵 解題日期: 2006.
Instructor: Ching-Chi Lin 林清池 助理教授
3Com Switch 4500 切VLAN教學.
指導教授:陳淑媛 學生:李宗叡 李卿輔.  利用下列三種方法 (Edge Detection 、 Local Binary Pattern 、 Structured Local Edge Pattern) 來判斷是否為場景變換,以方便使用者來 找出所要的片段。
1.1 線性方程式系統簡介 1.2 高斯消去法與高斯-喬登消去法 1.3 線性方程式系統的應用(-Skip-)
Graph V(G 1 )={0, 1, 2, 3, 4, 5, 6, 7, 8, 9} E(G 1 )={(0, 2), (0, 3), (1, 4), (2, 3), (2, 5), (2, 6), (3, 6), (3, 7), (4, 7), (5, 6), (5,
:New Land ★★★★☆ 題組: Problem Set Archive with Online Judge 題號: 11871: New Land 解題者:施博修 解題日期: 2011 年 6 月 8 日 題意:國王有一個懶兒子,為了勞動兒子,他想了一個 辦法,令他在某天早上開始走路,直到太陽下山前,靠.
: OPENING DOORS ? 題組: Problem Set Archive with Online Judge 題號: 10606: OPENING DOORS 解題者:侯沛彣 解題日期: 2006 年 6 月 11 日 題意: - 某間學校有 N 個學生,每個學生都有自己的衣物櫃.
: ShellSort ★★☆☆☆ 題組: Problem D 題號: 10152: ShellSort 解題者:林一帆 解題日期: 2006 年 4 月 10 日 題意:烏龜王國的烏龜總是一隻一隻疊在一起。唯一改變烏龜位置 的方法為:一隻烏龜爬出他原來的位置,然後往上爬到最上方。給 你一堆烏龜原來排列的順序,以及我們想要的烏龜的排列順序,你.
Chapter 2 聯立線性方程式與矩陣 緒言 線性方程式組 (systems of linear equations) 出現 在多數線性模式 (linear model) 中。根據以往解 題的經驗,讀者們也許已發現方程式的解僅與 該方程式的係數有關,求解的過程也僅與係數 的運算有關,只要係數間的相關位置不改變,
STAT0_sampling Random Sampling  母體: Finite population & Infinity population  由一大小為 N 的有限母體中抽出一樣本數為 n 的樣 本,若每一樣本被抽出的機率是一樣的,這樣本稱 為隨機樣本 (random sample)
1. 假設以下的敘述為一未提供 “ 捷徑計算 ” 能力的程式段,試用程 式設計的技巧,使此敘述經此改 寫的動作後,具有與 “ 捷徑計算 ” 之 處理方法相同之處理模式。 if and then E1 else E2 endif.
JAVA 程式設計與資料結構 第十四章 Linked List. Introduction Linked List 的結構就是將物件排成一列, 有點像是 Array ,但是我們卻無法直接經 由 index 得到其中的物件 在 Linked List 中,每一個點我們稱之為 node ,第一個 node.
MATLAB 程式設計 第 11 章 多維陣列 多維陣列的定義 在 MATLAB 的資料型態中,向量可視為 一維陣列,矩陣可視二維陣列,對於維 度 (Dimensions) 超過 1 的陣列則均可視 為「多維陣列」 (Multidimesional Arrays , 簡稱 N-D Arrays)
8.1 何謂高度平衡二元搜尋樹 8.2 高度平衡二元搜尋樹的加入 8.3 高度平衡二元搜尋樹的刪除
: The Playboy Chimp ★★☆☆☆ 題組: Problem Set Archive with Online Judge 題號: 10611: The Playboy Chimp 解題者:蔡昇宇 解題日期: 2010 年 2 月 28 日 題意:給一已排序的數列 S( 升冪.
Department of Air-conditioning and Refrigeration Engineering/ National Taipei University of Technology 模糊控制設計使用 MATLAB 李達生.
Monte Carlo Simulation Part.2 Metropolis Algorithm Dept. Phys. Tunghai Univ. Numerical Methods C. T. Shih.
第 1 章 PC 的基本構造. 本章提要 PC 系統簡介 80x86 系列 CPU 及其暫存器群 記憶體: Memory 80x86 的分節式記憶體管理 80x86 的 I/O 結構 學習組合語言的基本工具.
Introduction to Java Programming Lecture 17 Abstract Classes & Interfaces.
:Problem D: Bit-wise Sequence ★★★☆☆ 題組: Problem Set Archive with Online Judge 題號: 10232: Problem D: Bit-wise Sequence 解題者:李濟宇 解題日期: 2006 年 4 月 16.
24-6 設定開始與結束場景中的 程式 最後我們要替這個遊戲收個尾, 幫它把開始 的等待畫面跟結束畫面處理一下。
: The largest Clique ★★★★☆ 題組: Contest Archive with Online Judge 題號: 11324: The largest Clique 解題者:李重儀 解題日期: 2008 年 11 月 24 日 題意: 簡單來說,給你一個 directed.
7 陣列與搜尋 7.1 陣列 一般資料變數 宣告一維陣列 起始一維陣列 7-4
: Happy Number ★ ? 題組: Problem Set Archive with Online Judge 題號: 10591: Happy Number 解題者:陳瀅文 解題日期: 2006 年 6 月 6 日 題意:判斷一個正整數 N 是否為 Happy Number.
: Fast and Easy Data Compressor ★★☆☆☆ 題組: Problem Set Archive with Online Judge 題號: 10043: Fast and Easy Data Compressor 解題者:葉貫中 解題日期: 2007 年 3.
第三章 自動再裝載運用篇 使用時機:裝載計劃完成時,尚有剩餘空 間的情形,維持已固定計劃而繼續做裝載 最佳化。以支持次日裝載計劃而提前調整 作業模式。 裝載物品設定和裝載容器設定如前兩章介 紹,於此不再重複此動作,直接從裝載計 劃設定開始,直接從系統內定的物品和容 器選取所需.
Chapter 2 Getting Started Insertion Sort: 能有效率地排序小數字的演算法 範例 :
第十章 再論結構. 指標與結構的關係 /* File name: ex10-1a.c */ #include int main() { struct student { char *name; int score; }; struct student st= {"Brian", 97}; struct.
結構學(一) 第七次作業 97/05/15.
: Multisets and Sequences ★★★★☆ 題組: Problem Set Archive with Online Judge 題號: 11023: Multisets and Sequences 解題者:葉貫中 解題日期: 2007 年 4 月 24 日 題意:在這個題目中,我們要定義.
:Nuts for nuts..Nuts for nuts.. ★★★★☆ 題組: Problem Set Archive with Online Judge 題號: 10944:Nuts for nuts.. 解題者:楊家豪 解題日期: 2006 年 2 月 題意: 給定兩個正整數 x,y.
從此處輸入帳號密碼登入到管理頁面. 點選進到檔案管理 點選「上傳檔案」上傳資料 點選瀏覽選擇電腦裡的檔案 可選擇公開或不公開 為平台上的資料夾 此處為檔案分類,可顯示在展示頁面上,若要參加 MY EG 競賽,做品一律上傳到 “ 98 MY EG Contest ” 點選此處確定上傳檔案.
資料結構實習-一 參數傳遞.
1 第 4 章 複 因 子 的 應 用複 因 子 的 應 用. 2 移動等額系列 並非 所謂移動系列,是指現值所在的時 間點並非 t = 0. 向 “0” 的左方移動或向 t = “0” 的右 方移動.
Lecture 7 Sorting in Linear Time. Sorting in Linear Time2 7.1 Lower bounds for sorting 本節探討排序所耗用的時間複雜度下限。 任何一個以比較為基礎排序的演算法,排序 n 個元 素時至少耗用 Ω(nlogn) 次比較。
1 Introduction to Java Programming Lecture 2: Basics of Java Programming Spring 2008.
Section 4.2 Probability Models 機率模式. 由實驗看機率 實驗前先列出所有可能的實驗結果。 – 擲銅板:正面或反面。 – 擲骰子: 1~6 點。 – 擲骰子兩顆: (1,1),(1,2),(1,3),… 等 36 種。 決定每一個可能的實驗結果發生機率。 – 實驗後所有的實驗結果整理得到。
函式 Function Part.2 東海大學物理系‧資訊教育 施奇廷. 遞迴( Recursion ) 函式可以「呼叫自己」,這種動作稱為 「遞迴」 此程式的執行結果相當於陷入無窮迴圈, 無法停止(只能按 Ctrl-C ) 這給我們一個暗示:函式的遞迴呼叫可以 達到部分迴圈的效果.
JAVA 程式設計與資料結構 第二十章 Searching. Sequential Searching Sequential Searching 是最簡單的一種搜尋法,此演 算法可應用在 Array 或是 Linked List 此等資料結構。 Sequential Searching 的 worst-case.
資料結構實習-二.
演算法 8-1 最大數及最小數找法 8-2 排序 8-3 二元搜尋法.
845: Gas Station Numbers ★★★ 題組: Problem Set Archive with Online Judge 題號: 845: Gas Station Numbers. 解題者:張維珊 解題日期: 2006 年 2 月 題意: 將輸入的數字,經過重新排列組合或旋轉數字,得到比原先的數字大,
Chapter 10 m-way 搜尋樹與B-Tree
: Function Overloading ★★★☆☆ 題組: Problem Set Archive with Online Judge 題號: 11032:Function Overloading 解題者:許智祺 解題日期: 2007 年 5 月 8 日 題意:判對輸入之數字是否為.
1 Introduction to Java Programming Lecture 2: Basics of Java Programming Spring 2009.
專題成果報告 胺基酸功能預測開發環境 指導教授:歐昱言 邱彥豪 邱顯鈞.
5 重複迴圈 5.1 增減運算符號 增量運算符號 減量運算符號
中序轉後序 藉由由左向右掃瞄中序運算式產生後序運算式,遇到 運算元就直接輸出,遇到運算符號則先存入堆疊,將 優先權較高者輸出。 範例: a + b * c TokenStack [0] [1] [2] topoutput aa ++0a b+0ab *+ *1ab c+ *1abc eosabc*+
Teacher : Ing-Jer Huang TA : Chien-Hung Chen 2015/6/30 Course Embedded Systems : Principles and Implementations Weekly Preview Question CH7.1~CH /12/26.
函式 Function 東海大學物理系‧資訊教育 施奇廷. 函式簡介 當程式越來越大、越複雜時,程式的維護、 除錯會變得更困難,此時必須引入函式來 簡化程式或將程式分段,將程式重複的部 分改寫為函式,將程式「模組化」 這種作法有下列優點:節省程式發展的時 間、邏輯容易瞭解、程式容易除錯、可分 工合作完成程式.
資料結構實習-六.
1 Introduction to Java Programming Lecture 3 Mathematical Operators Spring 2008.
11 Ch05 遞迴 淡江大學 周清江 1. 2  遞迴函數乃是一個自己反覆呼叫自己的函數  一個典型的遞迴演算法 n! = n * (n-1)! = n * (n-1) * (n-2)! = n * (n-1) * (n-2) * (n-3)! = … = n * (n-1) * (n-2)
1 Introduction to Java Programming Lecture 2: Basics of Java Programming Spring 2010.
數字系統與資料表示法 教師: 陳炯勳 數系轉換 r進制數字 稱為 base r或 radix r 有r個計數符號,計數順序逢r歸零(進位) A n A n - 1 ‥‥A 2 A 1 A 0 ﹒A -1 A -2 ‥‥A -m 其中A n 及A.
牽涉兩個變數的 Data Table 汪群超 11/1/98. Z=-X 2 +4X-Y 2 +6Y-7 觀察 Z 值變化的 X 範圍 觀察 Z 值變化的 Y 範圍.
: Finding Paths in Grid ★★★★☆ 題組: Contest Archive with Online Judge 題號: 11486: Finding Paths in Grid 解題者:李重儀 解題日期: 2008 年 10 月 14 日 題意:給一個 7 個 column.
:Problem E.Stone Game ★★★☆☆ 題組: Problem Set Archive with Online Judge 題號: 10165: Problem E.Stone Game 解題者:李濟宇 解題日期: 2006 年 3 月 26 日 題意: Jack 與 Jim.
:Rings and Glue ★★☆☆☆ 題組: Problem Set Archive with Online Judge 題號: 10301: Rings and Glue 解題者:施博修 解題日期: 2011 年 5 月 18 日 題意:小約翰有了個大麻煩,他不小心將 rings.
幼兒行為觀察與記錄 第八章 事件取樣法.
結構學 ( 一 ) 第八次作業 97/05/22. 題目一 題目一 (a) 先決定放鬆哪個束制,成為靜定結構 以支承 C 之水平反力為贅力,則 C 點滾支 承變成自由端,即形成靜定基元結構 C 點滿足變位諧和  Δ CH =0.
1 Introduction to Java Programming Lecture 3 Mathematical Operators Spring 2009.
第 1 章 PC 的基本構造. 本章提要 PC 系統簡介 80x86 系列 CPU 及其暫存器群 記憶體: Memory 80x86 的分節式記憶體管理 80x86 的 I/O 結構 學習組合語言的基本工具.
: How many 0's? ★★★☆☆ 題組: Problem Set Archive with Online Judge 題號: 11038: How many 0’s? 解題者:楊鵬宇 解題日期: 2007 年 5 月 15 日 題意:寫下題目給的 m 與 n(m
Presentation transcript:

4 堆疊與佇列 4.1 前言 四種基本的資料結構 (可儲存資料的容器) 陣列 (Array)、串列(List): 最基本 4 堆疊與佇列 4.1 前言 四種基本的資料結構 (可儲存資料的容器) 陣列 (Array)、串列(List): 最基本 堆疊(Stack)、佇列(Queue) 1

4.2 堆疊 特徵 出入口在相同地方:頂端 (top) 新增(push)、刪除(pop) 都要透過 top 資料進出永遠保持 “後進先出” (Last In First Out,LIFO) 的順序 歐式自助餐之餐盤堆放方式即是一個典型的堆疊結構

4.2.1 以陣列實作堆疊(ch4_stack_1.java) class Stack { int data_array[ ]; // 堆疊陣列 int top; // 堆疊頂端指標 int n; // 堆疊容量為 n } 以陣列來實作堆疊的基本動作 1.建構子 a. 產生堆疊資料陣列: 生成一個 data_array[n] 陣列, 後續新增 (push) 資料從第0個索引開始存放。 b.將堆疊頂端指標 top 設為 -1,表示目前為空堆疊

4.2.1 以陣列實作堆疊 (ch4_stack_1.java) 以陣列來實作堆疊的基本動作 (續) 2. 將資料 data 放入堆疊( push(data) ): 先判斷堆疊是否已滿,如果未滿,將 top 指標的值加 1 後,將 data_array[top] 這個陣列元素的值設為 data 3.刪除資料( pop( ) ): 若堆疊不是空的,則將頂端資料 data_array[top] 的值取出, 將 top 指標的值減 1 。 4.判斷堆疊是否滿溢 ( full( ) ): 判斷 top 指標是否等於 n-1? 5.判斷堆疊是否是空的 ( empty( ) ): 判斷 top值是否小於 0 6. 取得堆疊頂端的資料,但不刪除 ( gettop( ) ): 若堆疊不是空的,則將頂端資料 data_array[top] 的值取出

4.2.2 以串列實作堆疊(ch4_stack_2.java) class Node //節點 { int data; Node link; } 以串列來實作堆疊的基本動作 1.建構子 a. 產生 top 節點: b. 將 top.link 設為 null public class Stack_2 { Node top; }

4.2.2 以串列實作堆疊(ch4_stack_2.java) 以串列來實作堆疊的基本動作 (續) 2. 將資料 data 放入堆疊( push(data) ): 新增節點 x,將 x.data 設為 data,將 x.link 設為 top.link ,再將 top.link 設為 x 3.刪除資料( pop( ) ): 先讀取 top.link.data 的值到變數 data,再將 top.link 設為 top.link.link,最後傳回 data。 4.判斷堆疊是否滿溢 ( full( ) ): 沒有這個方法 5.判斷堆疊是否是空的 ( empty( ) ): 判斷 top.link 的值是否為 null 6. 取得堆疊頂端的資料,但不刪除 ( top( ) ): 傳回 top.link.data

4.2.3 以陣列及串列實作堆疊之比較

4.3 堆疊的應用 4.3.1 方法的呼叫 4.3.2 運算式的表示法與轉換 4.3.3 運算式求值 4.3.4 河內塔 (跳過) 4.3.5 圖形的深度優先搜尋(第 7 章再看)

4.3.1 方法的呼叫 2 3 1 4 6 5

4.3.2 運算式的表示法與轉換 算術運算式 (Arithmetic Expression) 運算元 (operand) 運算子(operator) Example: a^b-c+d*(e+f) 中 運算元:a, b, c, d, e, f 運算子:^, -, +, *, (, ) 算術運算子之優先序(當沒有括號時尤其重要) 算術運算子 優先序 ^ (次方) 3 * / 2 + - 1 ( )

4.3.2 運算式的表示法與轉換 依據運算子所在位置在運算元之前、中、後,運算式 有 3 種表示法: 前置式 (Prefix): 不能使用括號 中置式 (Infix):可以使用括號 後置式 (Postfix):不能使用括號

4.3.2 運算式的表示法與轉換 作業 範例

4.3.2 運算式的表示法與轉換 給定運算子之值,電腦 先將中值式透過堆疊 轉換成後置式,再以堆疊 的方式計算其值

利用堆疊將中置轉為後置式的做法 由左至右依序讀入每一個運算式中的字元 c 1. 如果 c 是運算元 (即範例中的 a, b, c 等), 則直接輸出到後置式 2. 如果 c 是運算子(即範例中的 +, -, *, ^ 等), 則有 3 種情形 i. c 為 ‘(‘:將 c 放入堆疊 ii. c 為 ‘)’:持續取出堆疊頂端的字元 d, 如果取出的字元 d 不是左括號 將 d 輸出至後置式 如果取出的字元 d 是左括號 停止取出堆疊頂端字元 iii. c 為其他運算子:持續取出堆疊頂端的優先序大於等於 c 的運算子 k 將 k 輸出至後置式 再將 c 放入堆疊

例 4:利用堆疊將中置式 a-b/c+(d*e)-f 轉為後置式 Note: 堆疊指存放運算子,不放運算元 運算子須先放入堆疊,然後在適當時機取出 從堆疊中取出的運算子直接輸出到後置式 例 4:利用堆疊將中置式 a-b/c+(d*e)-f 轉為後置式 步驟 讀入之字元 處理方式 堆疊 (頂端在右方) 後置式的輸出結果 空堆疊 1 a 輸出 a 2 - 將 - 放入堆疊 3 b 輸出 b ab 4 / 將 / 放入堆疊 -/ 5 c 輸出 c abc 6 + 從堆疊取出 / 並將其輸出 從堆疊取出 - 並將其輸出 將 + 放入堆疊 abc/-

練習: (a-b)/(c-d)^e a^(b+c)/d-e a+b*(c-d)^e-f 步驟 讀入之字元 處理方式 堆疊 (頂端在右方) 後置式的輸出結果 7 ( 將 ( 放入堆疊 +( abc/- 8 d 輸出 d abc/-d 9 * 將 * 放入堆疊 +(* 10 e 輸出 e abc/-de 11 ) 從堆疊取出 * 並將其輸出 從堆疊取出 ( + abc/-de* 12 - 從堆疊取出 + 並將其輸出 將 - 放入堆疊 abc/-de*+ 13 f 輸出 f abc/-de*+f 14 從堆疊取出 - 並將其輸出 空堆疊 abc/-de*+f- 練習: (a-b)/(c-d)^e a^(b+c)/d-e a+b*(c-d)^e-f

練習(課本 第4-97頁 第 19 題) 下列中置運算式之後置式表示法為何 a*b/c (a-b)/(c-d)^e a/b-c/(d+e)*f a^(b+c)/d-e a+b*(c-d)^e-f

4.3.3 運算式求值 給定運算元之值後,中置式計算原則 由左而右計算結果 優先處理括號,其餘依照運算子的優先順序處理 例如: a – b/c + (d * e) – f 3 – (12/4)+(2*6)-5 必須考慮括號及運算子優先序,相當複雜,因此電腦先將 中值式透過堆疊轉換成後置式,再以堆疊的方式計算其值

後置式運算式求值

abc/-de*+f-

練習 (課本 第4-97頁 第 20 題) 下列後置式運算式之值為何 ab*c/ ab-cd-e^/ ab/cde+/f*-

程式作業 3 (4 月 9 日晚上12 點前上傳教學支援平台) 在 第 3 章(2) 投影片 (http://cjou.im.tku.edu.tw/ds2008/ch03-2.ppt) 將 中置式運算式 轉換成 前置式運算式 請 擴充 ch4_postfix.java 的程式,於得到各個後置式後, 請使用者輸入各變數及其值,再計算出在這些變數給定 值的情況下該後置式的值。輸出範例: 中置運算式:a-b/c+(d*e)-f 後置運算式:abc/-de*+f- 請輸入變數之值,結束請輸入 ‘.’ > a > 2 > b > 4 > c > d > 2 > e > 3 >f >4 >. 運算式值為:2

作業第 2 題說明 中序轉前序(Converting Infix to Prefix) 將輸入字串由右至左一個一個讀入字元 運算元由右至左直接輸出,運算子也是由右至左輸出,但需考慮以 下 3-5 的情況 若讀入之運算子優先權高於堆疊最上面的運算子則推入堆疊,但讀 入之右括號有最高優先權,已推入堆疊之右括號優先權則變為最低 (推入時機) 若讀入之運算子優先權低於(含等於)堆疊最上面的運算子,彈出堆 疊之運算子,但讀入之左括號優先權最低,應持續彈出堆疊之運算 子直到遇到一右括號,括號在輸出時應自動刪除 (彈出時機) 輸入字串結束時彈出所有堆疊內之運算子