• 沒有找到結果。

堆疊

N/A
N/A
Protected

Academic year: 2021

Share "堆疊"

Copied!
10
0
0

加載中.... (立即查看全文)

全文

(1)

第三章 堆疊

資料結構 鍾宜玲

(2)

你一定玩過堆疊的遊戲!

放入 拿取

(3)

堆疊(STACKS)的定義

 一個 後進先出 (LIFO, Last In First Out) 的有序串列。  資料的加入與刪除僅在串列的 頂端 (top)。  加入資料於堆疊內通常稱為 推入push。  刪除堆疊內的資料一般稱為 彈出pop。 資料 1 資料 2 資料 n 刪除 pop 加入 push 頂端 top …

(4)

堆疊的運作

C B A 頂端 D E (1) 加入資料 D (2) 加入資料 E (3) 刪除,傳回 E 堆疊 = (A, B, C) 堆疊 = (A, B, C, D) 堆疊 = (A, B, C, D, E)

(5)

以陣列製作堆疊

若堆疊的資料是整數,堆疊的最大容量是100

初始堆疊為空的,故 top 之初始值設為 -1。

#define N 100 //堆疊大小

int stack[N]; //陣列stack當作堆疊

(6)

加入資料 PUSH()

stack[top]=d; … d … 1 N -1 i top + 2 1 0 i stack[++top]=d;

加入一筆資料d,則 top 值增加1。

top++;

(7)

加入資料於陣列堆疊(續)

void push(int d) { if( top == N-1 ){ //檢查堆疊是否滿了, printf(“堆疊滿了\n”); //若是滿了則加入失敗。 exit(1); //加入失敗,結束程式執行 } stack[++top]=d; //否則將top加1,新資料加入陣 列中(索引top)。 }

(8)

刪除堆疊頂端資料

… … 1 N -1 i-i top 1 0 傳回頂端資料,並將top值減1。 ( 頂端內容不必清除 ) d return stack[top--];

(9)

取出堆疊頂端資料_程式

int pop() { if(top == -1){ //檢查堆疊是否空了 printf(“堆疊空了\n”); //若是空堆疊則刪除失敗 exit(1); //刪除失敗,結束執行 } return(stack[top--]); //傳回頂端資料,top值減一 }

(10)

例.

假設堆疊的大小是6,push ( ) 函數會將資料加入堆疊內, pop ( ) 函數會取出堆疊頂端資料。若主程式如下,請寫出 printf ( ) 執行的結果。 void main() { push(10); push(20); push(30); push( pop() + 40); printf(“%d\n”, pop()); printf(“%d\n”, pop()-pop()); } 執行結果: 70 10

參考文獻

相關文件

Z 指令 ping 為重要的使用 ICMP 封包的指令. Z 若設定防火牆,並非所有的 ICMP

 真值表必須在關鍵字table table table table及endtable endtable endtable之 endtable 間。. 

討論結束,整理腦圖。首先嘗試將資料歸類,然 後可以開始收窄範圍,定出文章中心,再按照重

left

五、前列資料請依以下第八項附圖所示依序疊放,用長尾夾夾好後,將報名表件放入報名

 試著將投影片第 12 頁的範例加上 critical section ,解決 race

三年級 園藝種植 校內各種植區、溫室水耕 四年級 有機堆肥 有機堆肥機、堆肥筒. 五年級 有機耕種 有機耕種田園、天台園圃、智能溫室

Motion 動畫的頭尾影格中只能有一個 Symbol 或是群組物件、文字物件;換 言之,任一動畫須獨佔一個圖層。.. Motion