資料結構之堆疊的順序儲存

2021-06-22 02:27:39 字數 1387 閱讀 7624

堆疊擁有兩種儲存方式:順序儲存和鏈式儲存。本文介紹堆疊了順序儲存方式。

堆疊簡稱為棧,是線性表的一種特殊表現形式。堆疊只能夠在表的一端進行插入/刪除操作,允許操作的一端稱為棧頂,不允許操作的一端稱為棧底。棧的乙個一定要記住的特點是:先進後出!下圖表示了堆疊的順序儲存方式。

假設用乙個長度為5的陣列a[5]來描述堆疊,其中a[0]表示棧底,a[4]表示棧的「最高點」,並採用top來指向堆疊的棧頂元素在陣列中的位置。當堆疊為空(圖a)時,陣列中沒有任何元素,此時top的值為-1;當將a壓入堆疊(圖b)時,相當於將a[0]賦值為a,此時將top指向0;當將b壓入堆疊(圖c)時,相當於將a[1]賦值為b,此時將top指向1;當需要從堆疊中彈出元素時,因為top指向的元素為b,因此先將b彈出(圖d),並將top指向0;當需要再次彈出元素時,將a彈出(圖e),並將top指向-1,此時表明堆疊已經為空了。

堆疊常用的操作方式有:查詢棧頂元素、彈出棧頂元素、向棧中壓入元素、判斷棧空、判斷棧滿等。筆者從物件導向設計的角度出發,將棧看做乙個物件,並定義其操作方法,**如下:

public class heap 

/*** 判斷是否棧滿。因為該堆疊最大可存放100個元素,因此當top為99時,說明堆疊已經滿了

* * @return 如果棧滿,返回true;否則返回false

*/public boolean isfull()

/*** 將元素data壓入堆疊中

* * @param data 需要壓入堆疊的元素

* @return 如果壓入成功,返回true;否則,返回false

*/public boolean push(object data)

else }

/*** 彈出堆疊的棧頂元素

* * @return 如果堆疊不為空,則彈出棧頂元素;否則,返回空值

*/public object pop()

else }

/*** 獲取堆疊的棧頂元素

* * @return 如果堆疊不為空,獲取棧頂元素;否則,返回空值

*/public object get()

else

}}

順序儲存的侷限性:1.需要事先知道堆疊的最大元素數,如果事先並沒有合理規劃好堆疊容量的話,就會造成空間的浪費,或者堆疊的溢位。

2.需要在記憶體空間中分配一段連續的空間,因此對記憶體空間的當前狀態有要求,如果記憶體中不存在這樣一段連續空間,則無法分配棧空間。

3.對於多個堆疊共享一段記憶體空間的情況,如果需要調整儲存空間時,元素將會發生大規模移動,時間複雜度較高。

資料結構學習之堆疊(順序儲存)

摘要 在計算機領域,堆疊是乙個不容忽視的概念,堆疊是兩種資料結構。堆疊都是一種資料項按序排列的資料結構,只能在一端 稱為棧頂 top 對資料項進行插入和刪除。在微控制器應用中,堆疊是個特殊的儲存區,主要功能是暫時存放資料和位址,通常用來保護斷點和現場。要點 堆,佇列優先,先進先出 1 棧,先進後出 ...

資料結構之順序儲存

本篇主要講資料結構中的順序結構,具體 如下 望讀者自行分析 很容易讀懂 include includeusing namespace std char pause typedef int t templateclass list templatelist list int m templatelis...

資料結構之順序儲存

1 線性表基本概念 由同型別資料元素構成有序序列的線性結構0 123 ii 1 k 1k 7584 5780 8292 8690 9769 87 插入程式片段 for j n 1 j i j a j 1 a j 右移,空出a j 注意這裡右移是初是從最後一項開始移動 a i x 插入x n 表長增1...