堆棧與堆
Stack是一個有序列表,其中列表項的**和刪除只能在稱為top的一端完成。因此,堆棧被認為是後進先出(後進先出)數據結構。Heap是一種基於樹的特殊數據結構,它滿足一種稱為Heap屬性的特殊屬性。另外,堆是一個完整的樹,這意味著樹的葉子之間沒有空隙,也就是說,在一個完整的樹中,每一級都在向樹中添加新的級別之前被填充,並且給定級別中的節點從左到右填充。
什麼是堆棧?
如前所述,stack是一種數據結構,其中元素只從稱為top的一端添加和刪除。堆棧只允許兩個基本操作,即push和pop。push操作將新元素添加到堆棧頂部。pop操作從堆棧頂部移除元素。如果堆棧已滿,則在執行推送操作時,將其視為堆棧溢出。如果在已空的堆棧上執行pop操作,則將其視為堆棧下溢。由於可以在堆棧上執行的操作數量很少,因此它被視為一個受限制的數據結構。此外,根據push和pop操作的定義方式,很明顯最後添加到堆棧中的元素首先從堆棧中移出。因此堆棧被認為是一種後進先出的數據結構。
什麼是堆?
如前所述,heap是滿足heap屬性的完整樹。堆屬性聲明,如果y是x的子節點,則存儲在節點x中的值應大於或等於存儲在節點y中的值(即值(x)≥值(y))。此屬性表示值最大的節點將始終放在根節點。使用此屬性構造的堆稱為最大堆。heap屬性的另一個變體與此相反。(即值(x)≤值(y))。這意味著具有最小值的節點將始終放在根節點,因此稱為最小堆。在堆上執行的操作範圍很廣,例如查找最小值(在最小堆中)或最大值(在最大堆中)、刪除最小值(在最小堆中)或最大值(在最大堆中)、增加(在最大堆中)或減少(在最小堆中)鍵等。
堆棧和堆的區別是什麼?