第1章——緒論
數據結構的三要素
什么是抽象數據類型
一些數據對象以及附加在這些數據對象上的集合的操作
第2章——線性表
尾插法、頭插法建立單鏈表
尾插法建立單鏈表,n個元素存儲在數組a中
void createListR(LNode *&C,int a[],int n){
LNode *r,*s;
C=(LNode*)malloc(sizeof(LNode));
C->next=NULL;
r=C;
for(int i=0;i<n;i++){
s=(LNode*)malloc(sizeof(LNode));
s->val=a[i];
r->next=s;
r=r->next;
}
r->next=NULL;
}
頭插法
void createListF(LNode *&C,int a[],int n){
LNode *s;
C=(LNode*)malloc(sizeof(LNode));
C->next=NULL;
for(int i=0;i<n;i++){
s=(LNode*)malloc(sizeof(LNode));
s->val=a[i];
s->next=C->next;
C->next=s;
}
}
棧和隊列的區別
棧:只能在一端進行插入或刪除操作的線性表
隊列:操作受限的線性表,僅允許一端插入,另一端刪除
第5章——數組、矩陣與廣義表
稀疏矩陣如何存儲
三元組、偽地址表示法(鄰接表、十字鏈表)
第6章——樹與二叉樹
給定n個結點,能構造多少中不同的二叉樹
Catlan函數:$ h(n)=\frac{C_{2n}^{n}}{n+1}$
樹的相關概念
- 滿二叉樹:除了最后一層外,其他結點都有兩棵子樹
- 完全二叉樹:除了最后一層外,其他任何一層的結點數都達到最大值,且最后一層只在右側缺少結點
- 平衡二叉樹:任何一個結點的左右子樹高度不超過1
第7章——圖
最小生成樹和最短路徑
- 迪傑斯特拉算法:求單源最短路徑,邊的權值不能為負
- 弗洛伊德算法:求任意頂點之間的最短路徑
- 普里姆算法:無向圖,稠密圖
- 克魯斯卡爾算法:無向圖、稀疏圖、並查集
第8章——排序
各種排序算法的性能
-
時間復雜度
快些歸隊:\(n\log_{2}n\),其他:\(n^{2}\)
-
空間復雜度
快排:logn,歸並:n,基數:r(關鍵字基的個數),其他都是1
-
算法穩定性
不穩定:快些選一堆
第9章——查找
B樹和B+樹
B樹,又稱多路平衡查找樹, B 樹中所有結點的孩子個數的最大值稱為B 樹的階,通常用m 表示。一棵m 階B 樹或為空樹,或為滿足如下特性的m 叉樹:
- 樹中每個結點至多有m 棵子樹,即至多含有m-1 個關鍵字。
- 若根結點不是終端結點,則至少有兩棵子樹。
- 除根結點外的所有非葉結點至少有「m/2] 棵子樹,即至少含有「m/2]- 1 個關鍵字。
- 所有的葉結點都出現在同一層次上,並且不帶信息(可以視為外部結點或類似千折半查找判定 樹的查找失敗結點,實際上這些結點不存在,指向這些結點的指針為空)。
B 樹是所有結點的平衡因子均等於0 的多路平衡查找樹。
B+樹是應數據庫所需而出現的一種B 樹的變形樹。
一棵m 階的B+樹需滿足下列條件:
- 每個分支結點最多有m 棵子樹(孩子結點)。
- 非葉根結點至少有兩棵子樹,其他每個分支結點至少有「m/2]棵子樹。
- 結點的子樹個數與關鍵字個數相等。
- 所有葉結點包含全部關鍵字及指向相應記錄的指針,葉結點中將關鍵字按大小順序排列, 並且相鄰葉結點按大小順序相互鏈接起來。
- 所有分支結點(可視為索引的索引)中僅包含它的各個子結點(即下一級的索引塊)中 關鍵字的最大值及指向其子結點的指針。