作者:王一哲
日期:2023年8月4日
堆疊 (stack) 是一種 後進先出 (the last in is the first out, LIFO) 的資料格式,只能從最後面(最上面)填入資料,從最後面(最上面)取出資料,無法從堆疊中間存取資料,以下是在 Python 及 C++ 的實作方法。
要先引入函式庫,函式庫的官方說明書在此 queue — A synchronized queue class,操作方式與 queue 基本上相同,可以參考另一篇文章〈Python 及 C++ 佇列 (queue)〉。
語法為
maxsize 可以不加,預設值為 0;如果有設定 maxsize,當堆疊已滿且要填入新資料時,會回傳錯誤訊息 Full。以下的程式碼會建立名稱為 mystack、maxsize 為3的堆疊。
語法為
block 可以不加,預設值為 True。timeout 可以不加,預設值為 None。
延續前面的程式碼,可以試試看第5、6行程式碼執行時的差異。
語法為
不需要加上任何參數,如果堆疊是空的回傳 True,如果堆疊中有資料回傳 Fasle。
語法為
不需要加上任何參數,如果堆疊已填滿回傳 True,如果堆疊還有空間回傳 Fasle。
語法為
不需要加上任何參數,回傳堆疊長度,格式為 int。
回傳並移除堆疊最後面(最上面)的資料,語法為
block 可以不加,預設值為 True。timeout 可以不加,預設值為 None。
例如以下的程式碼,可以試試看第2、3行程式碼執行時的差異。
這是很常用的技巧,假設堆疊 mystack 的內容為 [0, 1, 2, 3, 4],程式碼通常是以下的寫法,回傳值 n 依序為 4、3、2、1、0。
關於串列的基本操作請看這篇〈串列〉,以下是把串列當作堆疊的方法。
語法為
語法為
語法為
如串列是空的,長度為 0,
回傳並移除串列最後面的資料,語法為
參數為索引值,預設值為 -1,也就是最後一筆資料。其實 pop 可以回傳串列中任何索引值的資料,在此是為了配合堆疊的操作方式,因此省略索引值。
為了配合堆疊的操作方式,假設串列 mystack 的內容為 [0, 1, 2, 3, 4],程式碼通常是以下的寫法,回傳值 n 依序為 4、3、2、1、0。
要先引入函式庫,函式庫的官方說明書在此 cplusplus.com std::stack。
語法為
可以使用所有內建的資料格式,例如 int、float、string,甚至也可以使用自訂的資料格式。
語法為
例如
看起來功能和 push 很像,官方說明書在此std::stack::emplace,語法為
語法為
不需要加上任何參數,如果堆疊是空的回傳 1,如果堆疊中有資料回傳 0。
語法為
不需要加上任何參數,回傳堆疊長度,格式為 size_t,沒有正負號的整數。
回傳堆疊最上面的資料,語法為
移除堆疊最前面的資料,語法為
語法為
這是很常用的技巧,假設堆疊 mystack 的內容為 [0, 1, 2, 3, 4],,程式碼通常是以下的寫法,回傳值 n 依序為 4、3、2、1、0。
以上是我目前常用到的堆疊功能,如果之後有遇到其它需求會再補充內容。
C++
、Python