資料結構知識 一 堆疊

2021-08-01 03:42:17 字數 974 閱讀 4067

堆是一類特殊的資料結構的統稱。堆通常是乙個可以被看做一棵樹的陣列物件。堆總是滿足下列性質:

其中我們會了解到有二叉樹和斐波那契數。其中二叉樹中又有最小堆和最大堆的概念

二叉樹是每個節點最多有兩個子樹的樹結構。通常子樹被稱作「左子樹」(left subtree)和「右子樹」(right subtree)。二叉樹常被用於實現二叉查詢樹和二叉堆。

最小堆,是一種經過排序的完全二叉樹,其中任一非終端節點的資料值均不大於其左孩子和右孩子節點的值。

反之,最大堆,其中任一非終端節點的資料值均不小於其左孩子和右孩子節點的值。

當需要乙個物件是,使用new寫一行**,當執行這行**時,會自動在堆裡進行儲存分配。

它是一種運算受限的線性表。其限制是僅允許在表的一端進行插入和刪除運算。這一端被稱為棧頂,相對地,把另一端稱為棧底。向乙個棧插入新元素又稱作進棧、入棧或壓棧,它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素;從乙個棧刪除元素又稱作出棧或退棧,它是把棧頂元素刪除掉,使其相鄰的元素成為新的棧頂元素。

棧中存放的是一些基本資料型別的資料,比如:int,long,char等這類基本資料型別

棧有乙個很重要的特殊性,就是存在棧中的資料可以共享。假設我們同時定義: 

int a = 3; 

int b = 3; 

編譯器先處理int a = 3;首先它會在棧中建立乙個變數為a的引用,然後查詢棧中是否有3這個值,如果沒找到,就將3存放進來,然後將a指向3。接著處理int b = 3;在建立完b的引用變數後,因為在棧中已經有3這個值,便將b直接指向3。這樣,就出現了a與b同時均指向3的情況。這時,如果再令a=4;那麼編譯器會重新搜尋棧中是否有4值,如果沒有,則將4存放進來,並令a指向4;如果已經有了,則直接將a指向這個位址。因此a值的改變不會影響到b的值。要注意這種資料的共享與兩個物件的引用同時指向乙個物件的這種共享是不同的,因為這種情況a的修改並不會影響到b, 它是由編譯器完成的,它有利於節省空間。而乙個物件引用變數修改了這個物件的內部狀態,會影響到另乙個物件引用變數

一堆模板(醜陋0 0) 資料結構

1 1.主席樹模板練習 hdu2665 kth number 23 include4 include5 include6 include7 include8 include9 include10 using namespace std 11struct treet 2000000 14 int to...

資料結構 線性結構 三 堆疊

引入 字尾表示式求值 字尾表示式 運算符號位於兩個運算數之後 例 62 3 42 8 求值策略 從左向右 掃瞄 逐個處理運算數和運算符號 遇到運算數 記住當前運算數 遇到運算子 運用對應的運算數進行計算,將計算得到的數記住 一 堆疊的抽象資料型別描述 堆疊 stack 具有一定操作約束的線性表 即只...

面試題之一 堆疊區別

堆疊面試題 一 堆疊簡介 棧是編譯器自動申請與分配,程式設計師無法進行控制的順序線性結構,在程式結束時,由系統進行 堆是一種需要程式設計師手動申請的鍊錶結構,申請的記憶體空間需要程式設計師手動釋放,程式設計師不釋放時系統可能 二 堆疊差別棧 堆結構上 順序線性結構 鍊錶操作上 由編譯器自動申請分配釋...