面試複習之資料結構
第一章 緒論
1.1 框架
資料結構:
基本概念(資料、元素、物件和ADT)
邏輯結構(集合、線性、樹形和圖形)
儲存結構(順序、鏈式、索引和雜湊)
演算法:
基本概念:演算法、特性和評價
演算法分析:時間和空間複雜度
1.2 大綱知識點
邏輯結構:集合、線性、樹型、圖狀
儲存結構:順序、鏈式、索引、雜湊
1.3 演算法的時間複雜度和空間複雜度
演算法特性:有窮性、確定性、可行性、輸入、輸出
struct Node{
int data;
Node *nxt;
};
typedef struct Node{
int data;
struct Node *nxt;
}Node;
第二章 線性表
順序儲存:順序表
鏈式儲存:單鏈表、雙鏈表、迴圈連結串列、靜態連結串列(陣列實現)
定義利用了前驅、後繼
查詢、插入、刪除複雜度:
InitList(&L);//初始化
Length(L);//求表長
LocateElem(L,e);//按值查詢
GetElem(L,i);//按位查詢
ListInsert(&L,i,e);//插入
ListDelete(&L,i,&e);//刪除操作
PrintList(L);//輸出
Empty(L);//判空
DestroyList(&L) ;//銷燬操作
靜態連結串列中的指標是結點的相對地址(陣列下標),又稱遊標。
第三章 棧和佇列
線性表操作受限:棧(順序棧、鏈棧、共享棧),佇列(迴圈佇列、鏈式佇列、雙端佇列)
線性表推廣:陣列(一維陣列、多維陣列),壓縮儲存、稀疏矩陣
棧頂指標:初始-1
棧頂元素S[top]
進棧:++top,S[top]=x;
出棧:S[top],–top
棧空:top=-1,
棧長:top+1
這裡棧頂指標指向的就是棧頂元素,有事棧頂指標會指向棧頂元素的下一個位置,初始化top=0。
佇列的順序儲存
初始狀態:front=rear=0
進隊:q[rear]=x,++rear
出隊:x=q[front],++front;
判空:front==rear
第六章 樹與二叉樹
層次:根為第一層,
樹的高度(或者深度):樹中結點的最大層次
結點的深度是從根結點到該結點路徑上的結點個數。
結點的高度:從該結點向下走到達葉子結點的最長路徑上的結點個數。
樹的順序儲存結構中最簡單直觀的是雙親儲存結構。
鏈式儲存結構:孩子儲存結構(實質是圖的鄰接表儲存結構)
孩子兄弟儲存結構:樹和森林與二叉樹的相互轉換。
孩子兄弟表示法有稱為二叉樹表示法。
滿二叉樹:所有的分支結點都有左孩子和右孩子,並且葉子結點都集中在二叉樹的最下一層。
完全二叉樹:各結點的編號與相同深度的滿二叉樹中相同位置上的結點的編號均相同。
第七章 圖
樹:結點 圖:頂點
在有向圖中,通常將邊稱為弧。
圖中每條邊都可以附有一個對應的數,這種與邊相關的數稱為權。邊上帶有權的圖稱為帶權圖,也稱為網。
鄰接矩陣是圖的順序儲存結構
鄰接表是圖的一種鏈式儲存結構
第一個頂點和最後一個頂點相同的路徑稱為迴路或環。
在路徑序列中,頂點不重複出現的路徑稱為簡單路徑。
除第一個頂點和最後一個頂點之外,其餘頂點不重複出現的迴路稱為簡單迴路。
有向樹:有一個頂點的入度為0,其餘頂點的入度均為1的有向圖稱作有向樹。
圖的深度優先搜尋(DFS)類似於二叉樹的先序遍歷。時間複雜度
圖的廣度優先搜尋(BFS)類似於樹的層次遍歷,對於鄰接表複雜度
每個頂點均需搜尋一次(或入隊一次),每條邊至少訪問一次。
廣度優先生成樹
深度優先生成樹