Microsoft Word - 第04章 堆疊與佇列.doc

Similar documents
Microsoft Word - DataStruct-981.doc

Microsoft PowerPoint - Fig03_Stack.ppt [相容模式]

資料結構之C語言重點複習

投稿類別 : 資訊類 篇名 : 堆疊應用 : 電腦如何求出運算式的值 作者 : 李信穎 高雄市立高雄高工 資訊科三年級 朱培一 高雄市立高雄高工 資訊科三年級 指導老師 : 莊利吉老師

Microsoft PowerPoint - C_Structure.ppt

Microsoft Word - AEE CH03.doc

運算子多載 Operator Overloading

PowerPoint Presentation

1

Data Structures:

PowerPoint Presentation

CHAPTER VC#

Microsoft Word - F7801B_ch04習題解答.doc

Excel VBA Excel Visual Basic for Application

ROP_bamboofox.key

投影片 1

ebook39-5

Microsoft PowerPoint - Class5.pptx

CC213

C C C The Most Beautiful Language and Most Dangerous Language in the Programming World! C 2 C C C 4 C Project 30 C Project 3 60 Project 40

Microsoft Word - 2AF63內文.doc

Microsoft PowerPoint - 04-array_pointer.ppt

Chapter 16 集合

Microsoft Word - 1-3陳詠琳-近代..

概述

FY.DOC

840 提示 Excel - Excel -- Excel (=) Excel ch0.xlsx H5 =D5+E5+F5+G5 (=) = - Excel 00

1 Framework.NET Framework Microsoft Windows.NET Framework.NET Framework NOTE.NET NET Framework.NET Framework 2.0 ( 3 ).NET Framework 2.0.NET F

汇集全球21位医生的经验和智慧,总结出最实用的专业建议,这些都是最值得你牢记的健康提醒

1 行 业 发 展 不 平 衡 我 国 房 地 产 中 介 服 务 业 起 步 较 晚, 专 业 分 工 程 度 和 国 外 发 达 国 家 相 比 还 有 很 大 差 距 房 地 产 中 介 服 务 行 业 的 发 展 水 平 与 房 地 产 开 发 行 业 的 市 场 化 水 平 密 切 相 关

C/C++ Programming

Strings

(Microsoft Word - \277\357\262\325\252\272\246\322\266q.doc)

新・解きながら学ぶC言語

Microsoft PowerPoint - VB14.ppt

C/C++语言 - 运算符、表达式和语句

前言 C# C# C# C C# C# C# C# C# microservices C# More Effective C# More Effective C# C# C# C# Effective C# 50 C# C# 7 Effective vii

untitled

untitled

文档 1

新・明解C言語入門編『索引』

Fuzzy Highlight.ppt

Microsoft Word - 中耳的主要疾病~中耳炎.doc

C 1

新版 明解C++入門編

<4D F736F F D20C8EDC9E82DCFC2CEE7CCE22D3039C9CF>

Microsoft Word - ch04三校.doc

Microsoft PowerPoint - plan06.ppt

ebook14-4

C/C++ - 函数


Explain each of the following terms. (12%) (a) O(n 2 ) (b) protected in C++ language (c) sparse matrix 7. Write

Fun Time (1) What happens in memory? 1 i n t i ; 2 s h o r t j ; 3 double k ; 4 char c = a ; 5 i = 3; j = 2; 6 k = i j ; H.-T. Lin (NTU CSIE) Referenc

Microsoft Word - ACL chapter02-5ed.docx

bingdian001.com

C/C++ - 文件IO

Microsoft PowerPoint - STU_C_Lang_CH13.ppt

Open topic Bellman-Ford算法与负环

Microsoft Word - 11.doc

陣列與鏈結串列 Array and Linked List

新・解きながら学ぶJava

任務二 : 產生 20 個有炸彈的磚塊, 放在隨機的位置編輯 Block 類別的程式碼 import greenfoot.; // (World, Actor, GreenfootImage, Greenfoot and MouseInfo) Write a description of class

新版 明解C言語入門編

C/C++ - 字符输入输出和字符确认

Python a p p l e b e a r c Fruit Animal a p p l e b e a r c 2-2

06721 main() lock pick proc() restart() [2][4] MINIX minix2.0 GDT, IDT irq table[] CPU CPU CPU CPU (IDTR) idt[] CPU _hwint00:! Interrupt

C 1 # include <stdio.h> 2 int main ( void ) { 4 int cases, i; 5 long long a, b; 6 scanf ("%d", & cases ); 7 for (i = 0;i < cases ;i ++) 8 { 9

ebook39-6

c_cpp

obj-c_4.key

國立勤益科技大學 101 學年度研究所碩士班招生筆試試題卷所別 : 工業工程與管理系組別 : 資訊系統組科目 : 計算機概論准考證號碼 : ( 考生自填 ) 考生注意事項 : 一 考試時間 100 分鐘 選擇題 :<20 題, 每題 5 分, 共 100 分 > 1. CPU 的速度為 5 MIPS

( )... 5 ( ) ( )

untitled

Chapter 1 選 用 好 的 燜 燒 罐 選 用 好 的 燜 燒 罐 是 做 好 燜 燒 罐 料 理 最 重 要 的 步 驟, 除 了 須 注 意 使 用 的 材 質 是 否 符 合 食 器 使 用 標 準, 也 須 注 意 燜 燒 罐 的 保 溫 效 果, 才 能 安 心 享 用 燜 燒 罐

PowerPoint Presentation

1: public class MyOutputStream implements AutoCloseable { 3: public void close() throws IOException { 4: throw new IOException(); 5: } 6:

ebook 86-15

投影片 1

1

主程式 : public class Main3Activity extends AppCompatActivity { ListView listview; // 先整理資料來源,listitem.xml 需要傳入三種資料 : 圖片 狗狗名字 狗狗生日 // 狗狗圖片 int[] pic =new

C语言的应用.PDF

ebook50-14

int *p int a 0x00C7 0x00C7 0x00C int I[2], *pi = &I[0]; pi++; char C[2], *pc = &C[0]; pc++; float F[2], *pf = &F[0]; pf++;

Microsoft Word - 苹果脚本跟我学.doc

Transcription:

Chapter 4 堆疊與佇列 4-1 Stacks and Quenes Chapter 4 堆疊與佇列 (Stacks and Queues) 4-1 堆疊 (Stacks) 要點 : 堆疊的特點 1. 定義 : 堆疊 (stacks) 是一種有序串列, 其插入 (insertion) 與刪除 (deletion) 皆須在一同端進行 2. 插入與刪除的一端稱為頂端 (top); 另一端則稱為底部 (bottom) 3. 堆疊又稱為後入先出 (LIFO, Last-In-First-Out) 的資料結構 top 49 25 62 37 bottom 要點 : 堆疊的應用 1. 記錄返回地址 : 副程式呼叫時, 儲存呼叫者的返回位址 (Return Address), 當函數巢狀呼叫時, 最後被呼叫的函數最先返回呼叫者, 符合後入先出之特性, 故可以用堆疊來記錄其返回位址 2. 活動記錄 : 區塊結構之程式語言, 其執行期環境需要使用活動記錄 (activation record), 活動記錄中包含區域變數 (local variables) 的記憶體空間, 形式參數 (formal parameters) 的空間, 以及環境鏈結 (environment links) 如靜態鏈結 (static link) 和動態鏈結 (dynamic link)

4-2 資料結構 3. 中斷之處理 (Interrupt Handling): 記錄被斷程式的狀態, 如返回位址 旗號等, 亦是後進先出的特性 4. 遞迴副程式改寫成為非遞迴程式時, 有時需要用到堆疊來模擬, 才能改寫出來, 堆疊是用來記錄呼叫函數的相關狀態 5. 撰寫回溯式 (Backtracking) 演算法時, 須以堆疊記錄各步驟的狀況, 當發現選擇路徑行不通時, 由堆疊中可取回先前的狀態 圖形的深度優先追蹤, 就是一個使用堆疊來進行回溯演算法的例子 6. 中序式 前序式與後序式, 三者之間的相互轉換 ; 以及後序式的求值計算, 都需要使用堆疊來進行 7. 堆疊機器 (Stack Machine): 一種執行零位址指令的機器, 計算前先將運算元 (operands) 置於堆疊中, 指令執行時, 由堆疊取出所需的運算元, 計算來的結果再放回堆疊中 要點 : 堆疊之抽象資料型態 structure Stack is objects: 一個有限 有序之線性串列 functions: for all s Stack,i Item,M positive int erger CreateStack(s,M):Stack ::= 建立一個空的堆疊 s, 其最大容量為 M IsStackEmpty(s):Boolean::=if s 中元素個數 =0 then IsStackEmpty =true else IsStackEmpty =false IsStackFull(s,M):Boolean ::= if s 中元素個數 =M then IsStackFull =true else IsStackFull =false AddStack(s,i):Stack ::= if IsStackFull (s,m) then Error else 將 i 插入 s 的頂端 DeleteStack(s):Item ::= if IsStackEmpty (q) then Error

Chapter 4 堆疊與佇列 4-3 Stacks and Quenes else 將 s 最頂端的元素刪除並傳回其值 TopOfStack(s):Item ::= if IsStackEmpty (q) then Error else 傳回 s 最頂端的元素 end end Stack 要點 : 堆疊之陣列實作使用一個陣列來存放資料, 並且以一個整數變數 sp(stack pointer) 記錄堆疊頂端的位置 所需資料結構宣告如下 : (1) const int N = 100; (2) ItemType stack[n]; (3) int sp; 1. 建立堆疊 : 只要將 sp 指向底部即可 (1) void CreateStack() (3) sp = -1; (4) 2. 檢查堆疊是否為空的或滿的 (1) Boolean IsStackEmpty() (3) return (sp == -1); (4) (5) Boolean IsStackFull() (6) (7) return (sp == (N 1)); (8)

4-4 資料結構 3. 插入新資料到堆疊頂端, 一般又稱為 Push down (1) void AddStack(ItemType item) (3) if (IsStackFull()) StackOverflow(); (4) stack[++sp] = item; (5) 4. 由堆疊中取出資料, 一般又稱為 Pop up (1) ItemType DeleteStack() (3) if (IsStackEmpty()) StackUnderflow(); (4) else return stack[sp--]; (5) 5. 傳回堆疊頂端的資料, 但並未從堆疊中刪除 (1) ItemType StackTop() (3) if (IsStackEmpty()) StackUnderflow(); (4) else return stack[sp]; (5) 精選例題 1 寫出三種堆疊的應用 解答 :(1) 存放副程式呼叫時的 Activation Record 或 Interrupt Handler 記錄狀態之用 (2) 做為 Infix Expression 至 Postfix Expression 轉換之用 (3) 用在 Backtracking 演算法上

精選例題 2 Chapter 4 堆疊與佇列 4-5 Stacks and Quenes (1) 使用 vector representation 來表示一個 stack, 請寫出演算法來取得第 i 項元素的值, 但不刪除此項元素 (2) 使用 vector representation 來表示一個 stack, 請寫出演算法來改變第 i 項元素的值 解答 :(1) int get(int i) if (i > sp+1) error(); else return stack[sp - i + 1]; (2) void change(int i, items x); if (i > sp+1) error(); else stack[sp - i + 1]=x; 精選例題 3 有一 stack 其基底為 B, 指標內位址為 P, 容量大小為 Z, 試寫一程序 (Algorithm) 描述 pop-up 和 push-down 解答 :init. P=B-1 void push_down(items x) if (P == B+Z-1) StackOverflow(); else Mem[++P] = x; items pop_up() if (P < B) StackUnderflow();

4-6 資料結構 else return Mem[P--]; 精選例題 4 給予如下堆疊定義 ( 使用 C 語言 ): #define MAX_STACK 100; typedef int ITEM_TYPE; typedef enum Boolean FALSE, TRUE BOOLEAN; tyoedef struct stack_type ITEM_TYPE item[max_stack]; int top; STACK_TYPE; 假設 top 是指到堆疊下一個空的位置 (point to the next free spot in the stack) 請用 C 語言實作下列運算 : void create_stack(stack_type *stack); void destroy_stack(stack_type *stack); BOOLEAN empty_stack(stack_type *stack); BOOLEAN full_stack(stack_type *stack); void push(stack_type *stack, ITEM_TYPE new_item); void pop(stack_type *stack, ITEM_TYPE *old_item); 90 高考三級第二試解答 :void create_stack(stack_type **stack) *stack=(stack_type *)malloc(sizeof(stack_type)); (*stack) top=0; void destroy_stack(stack_type *stack) free(stack); BOOLEAN empty_stack(stack_type *stack) return (stack top==0);