面試複習之資料結構

2021-08-21 10:00:00 字數 2233 閱讀 4226

資料結構:

基本概念(資料、元素、物件和adt)

邏輯結構(集合、線性、樹形和圖形)

儲存結構(順序、鏈式、索引和雜湊)

演算法:

基本概念:演算法、特性和評價

演算法分析:時間和空間複雜度

邏輯結構:集合、線性、樹型、圖狀

儲存結構:順序、鏈式、索引、雜湊

演算法特性:有窮性、確定性、可行性、輸入、輸出

struct node;

typedef

struct nodenode;

順序儲存:順序表

鏈式儲存:單鏈表、雙鏈表、迴圈鍊錶、靜態鍊錶(陣列實現)ne

xtn ex

tpr

ior pri

or

定義利用了前驅、後繼

查詢、插入、刪除複雜度:o(

n)o (n

)

initlist(&l);//初始化

length(l);//求表長

locateelem(l,e);//按值查詢

getelem(l,i);//按位查詢

listinsert(&l,i,e);//插入

listdelete(&l,i,&e);//刪除操作

printlist(l);//輸出

empty(l);//判空

destroylist(&l);//銷毀操作

靜態鍊錶中的指標是結點的相對位址(陣列下標),又稱游標。

線性表操作受限:棧(順序棧、鏈棧、共享棧),佇列(迴圈佇列、鏈式佇列、雙端佇列)

線性表推廣:陣列(一維陣列、多維陣列),壓縮儲存、稀疏矩陣to

p top

棧頂指標:初始-1

棧頂元素s[top]

進棧:++top,s[top]=x;

出棧:s[top],–top

棧空:top=-1,

棧長:top+1

這裡棧頂指標指向的就是棧頂元素,有事棧頂指標會指向棧頂元素的下乙個位置,初始化top=0。

佇列的順序儲存fr

ont fro

nt

rear

r ea

r初始狀態:front=rear=0

進隊:q[rear]=x,++rear

出隊:x=q[front],++front;

判空:front==rear

層次:根為第一層,

樹的高度(或者深度):樹中結點的最大層次

結點的深度是從根結點到該結點路徑上的結點個數。

結點的高度:從該結點向下走到達葉子結點的最長路徑上的結點個數。

樹的順序儲存結構中最簡單直觀的是雙親儲存結構

鏈式儲存結構:孩子儲存結構(實質是圖的鄰接表儲存結構)

孩子兄弟儲存結構:樹和森林與二叉樹的相互轉換。

孩子兄弟表示法有稱為二叉樹表示法。

樹:結點 圖:頂點

在有向圖中,通常將稱為

圖中每條邊都可以附有乙個對應的數,這種與邊相關的數稱為權。邊上帶有權的圖稱為帶權圖,也稱為

鄰接矩陣是圖的順序儲存結構

鄰接表是圖的一種鏈式儲存結構

第乙個頂點和最後乙個頂點相同的路徑稱為迴路或環。

在路徑序列中,頂點不重複出現的路徑稱為簡單路徑。

除第乙個頂點和最後乙個頂點之外,其餘頂點不重複出現的迴路稱為簡單迴路。

有向樹:有乙個頂點的入度為0,其餘頂點的入度均為1的有向圖稱作有向樹。

圖的深度優先搜尋(dfs)類似於二叉樹的先序遍歷。時間複雜度o(

|v|+

|e|)

o (|

v|+|

e|

)圖的廣度優先搜尋(bfs)類似於樹的層次遍歷,對於鄰接表複雜度o(

|v|+

|e|)

o (|

v|+|

e|

)每個頂點均需搜尋一次(或入隊一次),每條邊至少訪問一次。

廣度優先生成樹

深度優先生成樹

資料結構之 棧 複習

棧 先進後出的線性表 棧也可以通過順序儲存和鏈式儲存的方式實現 一 順序儲存實現 陣列的尾端作為棧頂 實現 package org.xiazdong.list public class myarraystack public void push t e top if top t.length t t...

資料結構之 佇列 複習

佇列是先進先出的線性表 佇列由於是線性表,因此也有順序儲存和鏈式儲存兩種實現方式 一 順序儲存實現 由於佇列的特性是 從隊尾新增,從對頭刪除,因此如果讓陣列的尾部用作隊尾,陣列的頭部用作隊頭,則刪除元素時,時間複雜度為o n 因此我們需要用迴圈陣列實現,並且維護兩個屬性 front rear,fro...

資料結構複習之 排序

排序 對一串行物件根據某個關鍵字進行排序 穩定 如果a原本在b前面,而a b,排序之後a仍然在b的前面 不穩定 如果a原本在b的前面,而a b,排序之後a可能會出現在b的後面 內排序 所有排序操作都在記憶體中完成 外排序 由於資料太大,因此把資料放在磁碟中,而排序通過磁碟和記憶體的資料傳輸才能進行 ...