資料結構複習小記1

2021-08-29 09:58:06 字數 3143 閱讀 9850

資料元素是資料的基本單位

資料項是資料不可分割的最小單位。

資料結構的基本結構:集合,線性結構,樹形結構,圖(網)狀結構

邏輯結構(抽象的,與現實無關)物理結構(儲存結構)---順序儲存結構(位置相鄰),鏈式儲存結構(指標表示關係)

資料型別--抽象資料型別(adt)=資料物件,資料關係,基本操作

演算法的特徵:有窮性,確定性,可行性,輸入,輸出

演算法的設計要求:正確性,可讀性,健壯性,效率與低儲存量

時間複雜度:演算法執行操作的時間;空間複雜度:演算法占用的儲存空間大小

線性表及其特點:線性表是n個資料元素的有限序列;特點:第乙個,最後乙個(有第乙個元素和最後乙個元素),前驅,後繼(除了第乙個元素,都有前驅;除了最後乙個元素,都有後繼)

順序表----線性表的順序儲存結構

棧:先進後出,入棧(push),出棧(pop)

鏈棧:棧的鏈式儲存結構,用不帶頭結點的單鏈表實現;

順序棧:順序儲存結構

佇列:先進先出

鏈佇列:佇列空q.front==q.rear

1.訪問方式:順序表可以順序訪問,也可以隨機訪問,鍊錶只能從表頭順序訪問元素。

2.邏輯結構與物理結構

採用順序儲存是,邏輯上相鄰的元素,其對應的物理儲存位置也相鄰。採用鏈式儲存時邏輯上相鄰的元素,其物理儲存位置不一定相鄰,其邏輯關係是通過指標鏈結來表示的。

3.查詢,插入和刪除操作

對於按值查詢,當順序表在無序的情況下,兩者的時間複雜度為o(n);而當順序表有序時採用折半查詢o(logn)。

對於按序號查詢,順序表支援隨機訪問,時間複雜度為o(1),鍊錶的平均複雜度為o(n).順序表的插入,刪除操作,平均需要移動半個表長的元素。鍊錶的插入,刪除操作只需要修改相關結點的指標域。由於鍊錶每個結點帶有指標域,因而在儲存空間上比順序儲存需較大的代價,儲存密度不夠大。

4.   空間分配

順序儲存在靜態儲存分配情況下,一旦儲存空間裝滿就不能擴充,會溢位;動態儲存分配的儲存空間可以擴充,需要移動大量元素,操作效率降低,而且若記憶體中沒有更大塊的連續儲存空間將導致分配失敗。

1.基於儲存的考慮

對線性表的長度或儲存規模難以估計時,不宜採用順序表;鍊錶不用事先估計儲存規模,但鍊錶的儲存密度低。

2.基於運算的考慮

經常按序號訪問資料元素,順序表優先鍊錶;經常做插入,刪除操作時,鍊錶優先於順序表。

3.基於環境考慮

順序表容易實現,任何高階語言中都有陣列型別,鍊錶操作基於指標。

出棧公式次數:1/(n+1) (2n)!/(n!*n!)

隊空條件:q.front == q.rear == 0;

但是隊滿條件不能是q.rear==maxsize,因為當front == q.rear-1時,仍然媽祖條件,但此時隊中只有乙個元素,此時入隊出現「上溢位」,但這種溢位並不是真正的溢位,這是順序佇列的缺點

3.迴圈佇列

當隊首指標q.front=maxsize-1後,再前進乙個位置就自動到0,這可以利用除法取餘運算(%)來實現

初始時:q.front=q.rear=0

隊首指標進1:q.front=(q.front+1)%maxsize;

隊尾指標進1:q.rear=(q.rear+1)%maxsize;    

佇列長度: (q.rear+maxsize - q.front)%maxsize;    //加上maxsize的原因是q.rear可能迴圈到q.front的左邊,這時長度就是q.rear+maxsize - q.front,%maxsize的目的是q.rear在q.front的右邊時,加上maxsize就不是準確值了,所以取模,而取模對前一種情況是沒有影響的

出隊入隊時:指標都按順時針方向進1

且隊空的條件為q.front=q.rear,而隊滿的條件也是q.front=q.rear(隊尾指標追上了隊首指標),解決方案:

1)犧牲乙個單元來區分隊空隊滿,入隊時少用乙個佇列單元,這是一種較為普遍的做法,約定以「隊頭指標在隊尾指標的下乙個位置作為隊滿的標誌」。

隊滿條件:(q.rear+1)%maxsize==q.front 

隊空條件:q.front==q.rear

佇列中元素的個數:(q.rear-q.front+maxsize)%maxsize

2) 型別中增設表示元素個數的資料成員。這樣隊空的條件為q.size == 0;隊滿的條件為q.size==maxsize,兩種情況都有q.front==q.rear

3) 型別中增設tag資料成員,以區分堆滿還是隊空。tag等於0的情況下,若因刪除導致q.front==q.rear則為隊空,tag等於1的情況下,若因插入導致q.front==q.rear則為隊滿

棧在表示式求值中的應用

a+b*(c-b)-e/f   字尾表示式:abcd-*+ef/

緩衝區是佇列實現的。

廣度優先搜尋圖需要佇列作為輔助儲存空間。

樹與二叉樹:

樹是n個結點的有限集合,n=0時,為空樹;

非空樹滿足:有且僅有乙個特定的成為根的結點;當n>1時,

其餘結點可分為m個互不相交的有限集合,其中每個集合本身又是一顆數,稱為根結點的子樹。

樹的特點:根結點沒有前驅結點,其他結點有且只有乙個前驅結點;樹中所有結點可以有零個或多個後續結點。

高度h的m叉樹至多有(m^h-1)/(m-1)個結點

二叉樹是另一種樹形結構,特點是每個結點至多只有兩顆子樹(度不大於2),子樹有左右之分不能任意顛倒。

非空二叉樹上葉子結點數等於度為2的結點數加1

非空二叉樹上第k層上至多有2^(k-1)個結點(k>=1)。

高度為h的二叉樹至多有2^h-1個結點

結點i所在層次為(log2 i)+1

具有n個結點的完全二叉樹的高度為log2(n+1) n1=1或log2n +1(n1=0)

高度為h的完全二叉樹最少有2^(h-1)

非空指標數=總分支數=n-1,空指標數=2*結點總數-非空指標數=2n-(n-1)=n+1

二叉樹遍歷

二叉樹為空不做操作

1.先序遍歷:根結點-先序遍歷左子樹-先序遍歷右子樹

2.中序遍歷:中序遍歷左子樹-根結點-中序遍歷右子樹

3.後續遍歷:後續遍歷左子樹-後序遍歷右子樹-根結點

可以借助棧將二叉樹的遞迴遍歷演算法轉換為非遞迴演算法;

線索二叉樹

1.線索二叉樹是一種物理結構

2.n個結點的線索二叉樹上含有的線索數為n+1

資料結構複習(1)

1.程式 演算法 資料結構 2.演算法的五個特性 有窮性,確定性,可行性,輸入,輸出 衡量乙個演算法要從 正確性 可讀性 健壯性 效率與低儲存量需求 來考慮 3.時間複雜度與空間複雜度直觀的反映了優劣,不同的演算法可以實現相同的功能我們可以用時間複雜度來衡量乙個演算法的好壞,常見的1 輸入輸出 n ...

資料結構複習 1

資料結構的基本概念 資料 資料是資訊的載體,是描述客觀事物的數,字元以及所有能輸入到計算機中並被電腦程式識別和處理的符號的集合。資料是電腦程式加工的原料。資料元素 資料元素是資料的基本單位,通常作為乙個整體進行考慮和處理。乙個資料元素可由若干資料項組成,資料項是構成資料元素的不可分割的最小單位 例如...

資料結構複習筆記 1

為什麼要學習資料結構?看圖就能明白了!資料結構是什麼?資料結構課程體系 資料結構課程集中討論軟體開發過程中的設計階段 同時設計編碼和分析階段的若干基本問題。此外,為了構造出好的資料結構及其實現,還需考慮資料結構及其實現的評價與選擇。因此,資料結構的內容包括三個層次的五個 要素 如圖1.5 所示。資料...