堆疊與佇列

堆疊 stack


資料先進後出的模式LIFO Last in First Out,便是堆疊,例如:副程式的呼叫,或是記憶體的使用,便是堆疊的一種應用,此種資料結構只允許元素在單一位置端增添或刪減,在堆疊中增添資料稱為『推進Push』,刪去元素稱為『移出Pop 』。此種資料結構利用一個頂端指標,標定堆疊內最頂端的資料位址,當堆疊內的資料變動時,該指標亦同步變動

例子:疊盤子、發牌、走迷宮

操作:

push:將資料放入堆疊頂端

pop:取出堆疊頂端之資料

有時候也會多實作一些額外的操作以方便使用,例如:

peek:看堆疊頂端的資料而不取出。(註:也有top等不同的用字)

size:取得堆疊的數目。

在實作上一般可以使用陣列或連結串列(LinkedList)兩種方式來實作:

陣列

堆疊建立時即建立一個陣列,並使用一個索引來記錄目前所指到的位址,新增或移除資料時,同步修改索引位址;如果有實作堆疊數目的功能時,這數字正好可做為此索引之用。優點是不用處理指標鏈結建立與移除,缺點是容量超過陣列大小時需要額外處理。

連結串列

用指標將資料串起來,將新的東西不斷接在最後面,而取出時則移除最後面的東西即可。優缺點與陣列相反。