一文詳解堆疊(一) 資料結構的堆與棧

2021-09-28 16:15:42 字數 1443 閱讀 2177

前言:我們經常聽見乙個概念,堆(heap)和棧(stack),其實在資料結構中也有同樣的這兩個概念,但是這和記憶體的堆疊是不一樣的東西哦,本文也會說明他們之間的區別的,另外,本文的只是是以c/c++為背景來說明,不同的語言在記憶體管理上面會有區別。本文是第一篇,簡要介紹資料結構中的堆與棧。

資料結構中,堆(heap)與棧(stack)是兩個常見的資料結構,理解二者的定義、用法與區別,能夠利用堆與棧解決很多實際問題。

1.1 棧簡介

棧是一種運算受限的線性表,其限制是指只僅允許在表的一端進行插入和刪除操作,這一端被稱為棧頂(top),相對地,把另一端稱為棧底(bottom)。把新元素放到棧頂元素的上面,使之成為新的棧頂元素稱作進棧、入棧或壓棧(push);把棧頂元素刪除,使其相鄰的元素成為新的棧頂元素稱作出棧或退棧(pop)。這種受限的運算使棧擁有「先進後出」的特性(first in last out),簡稱filo

(1)棧的分類

棧分順序棧和鏈式棧兩種。棧是一種線性結構,所以可以使用陣列或鍊錶(單向鍊錶、雙向鍊錶或迴圈鍊錶)作為底層資料結構。使用陣列實現的棧叫做順序棧,使用鍊錶實現的棧叫做鏈式棧,二者的區別是順序棧中的元素位址連續,鏈式棧中的元素位址不連續。   

棧的結構如下圖所示:

1.2 堆簡介

(1)堆的簡介及性質

堆是一種常用的樹形結構,是一種特殊的完全二叉樹,當且僅當滿足所有節點的值總是不大於或不小於其父節點的值的完全二叉樹被稱之為堆。堆的這一特性稱之為堆序性

heap: 堆。一般也稱作priority queue(即優先佇列)

因此,在乙個堆中,根節點是最大(或最小)節點。如果根節點最小,稱之為小頂堆(或小根堆),如果根節點最大,稱之為大頂堆(或大根堆)。堆的左右孩子沒有大小的順序。

堆的應用十分廣泛,下面給出一些堆的常見操作:

上浮 shift_up;下沉 shift_down插入 push彈出 pop取頂 top堆排序 heap_sort
關於堆的一些具體實現,本文暫時不給出,後面有時間了再更

資料結構知識 一 堆疊

堆是一類特殊的資料結構的統稱。堆通常是乙個可以被看做一棵樹的陣列物件。堆總是滿足下列性質 其中我們會了解到有二叉樹和斐波那契數。其中二叉樹中又有最小堆和最大堆的概念 二叉樹是每個節點最多有兩個子樹的樹結構。通常子樹被稱作 左子樹 left subtree 和 右子樹 right subtree 二叉...

資料結構的堆與棧

在計算機領域,堆疊是乙個不容忽視的概念,我們編寫的c語言程式基本上都要用到。但對於很多的初學著來說,堆疊是乙個很模糊的概念。堆疊 一種資料結構 乙個在程式執行時用於存放的地方,這可能是很多初學者的認識,因為我曾經就是這麼想的和組合語言中的堆疊一詞混為一談。我身邊的一些程式設計的朋友以及在網上看帖遇到...

資料結構(一) 資料結構緒論與演算法

資料結構可以說是計算機軟體相關專業的基礎課程,幾乎可以說要想從事程式設計或開發工作,都無法避開這部分的知識。但是這部分知識也是相對來說較難的知識,即使是學會了其中的內容,要在開發和程式設計工作中很好地運用資料結構的知識對程式猿來說也是較難的,反正對我來講是挺難的。在考研的過程中資料結構是我的一門主要...