1.定義:乙個函式自己直接或間接呼叫自己
2.舉例 :1)1+2+....+100
2)求階乘
3)漢諾塔
4)走迷宮
3.遞迴滿足的三個條件
1)遞迴必須有乙個明確的終止條件
2)該函式所處理的資料規模必須在遞減 (值可以是遞增的)
3)這個轉化必須是可解的 (把已知的經典遞迴記住)
4.迴圈和遞迴
遞迴:易於理解 ,但速度慢,儲存空間大 (不斷分配空間儲存,反覆呼叫函式)
迴圈:不易理解,但速度快,儲存空間小
5.遞迴的應用樹和森林就是以遞迴的方式定義的
樹和圖的很多演算法都是以遞迴來實現的
很多數學公式就是以遞迴的方式定義的 (斐波拉契數列)
1.定義:一種可以實現「先進後出」的儲存結構 《棧類似於箱子》
2.分類:靜態棧
動態棧3.演算法:出棧、壓棧
4.應用:函式呼叫
中斷表示式求值
記憶體分配
緩衝處理迷宮
1.定義:一種可以實現「先進先出」的儲存結構 《類似於排隊買票》
2.分類:鏈式佇列--用鍊錶實現
靜態佇列--用陣列實現 (靜態佇列通常都必須是迴圈佇列)
3.靜態佇列為什麼必須是迴圈佇列?
4.迴圈佇列需要幾個引數來確定? 需要2個引數來確定 front rear
2個引數不同場合有不同的含義
建議初學者先記住,然後慢慢體會:
1)佇列初始化 front和rear的值都是零
2)佇列非空 front代表的是佇列的第乙個元素,rear代表的是佇列的最後乙個有效元素的下乙個元素
3)佇列空 front和rear的值相等,但是不一定為零
5.迴圈隊列入隊偽演算法的講解
1)將值存入rear所代表的位置
2)錯誤的寫法:r=r+1; 正確的寫法:r=(r+1)%陣列的長度
6.迴圈佇列出隊偽演算法的講解
1)出隊的值儲存起來(可選步驟)
2)f=(f+1)%陣列的長度
*如何判斷迴圈佇列是否為空 如果front和rear的值相等,則一定為空
*如何判斷迴圈佇列是否已滿 (front的值可能比rear大、小、相等)
1)多增加乙個標誌引數
2)少用乙個元素【通常使用第二種方式】
如果r和f的值緊挨著,則佇列已滿。
if((r+1)%陣列的長度==f)
已滿else 未滿
7.演算法:入隊,出隊
8.佇列應用:所有和時間有關的操作都有佇列的影子
1.排序演算法的穩定性只是演算法的性質,並不能衡量乙個演算法的優劣。
穩定性--若待排序的兩個元素,在使用排序演算法後,該兩元素的先後位置為發生改變,則是穩定的。
2.內部排序--在排序期間元素全部存放在記憶體中
外部排序--排序期間元素無法全部同時存放在記憶體中,必須在排序過程中根據要求不斷地在內外存之間進行移動。
3.時空複雜度決定內部排序演算法的效能
4.插入排序--每次將乙個待排序的序列插入到乙個前面已經排好序的子串行當中
1)直接插入:插入--後移
2)折半插入:折半查詢o(log2n)+移動o(n)
3)希爾排序:縮小增量排序【讓序列逐步變成有序序列,然後對其進行插入排序】
基本思想:
先將排序表分割成d個形如i,i+d,i+2d...的特殊子表,分別進行直接插入排序,當整個表中的元素已經呈現基本有序時,再對全體記錄進行一次直接插入排序。
5.交換排序
4)氣泡排序:兩兩比較交換值
5)快速排序:選取乙個元素作為基準,一趟排序劃分兩部分 遞迴
6.選擇排序--選取最小元素
6)直接選擇排序
7)堆排序(見下圖)
對於小根堆而言,內節點關鍵字小於分支結點;
對於大根堆而言,內節點關鍵字大於分支結點。
(大根堆)a》若孩子結點均小於雙親結點,則該結點調整結束;
b》若存在孩子結點大於雙親結點,則將最大的孩子結點與雙親結點交換,並對該孩子結點進行上述操作,直到出現a或者葉節點為止
7.8)歸併排序--歸併操作
8.基數排序--不基於比較
9.外部排序--採用歸併排序方法
資料結構筆記(2)
資料結構筆記 2 類物件的定義 類是現實世界或思維世界中的實體在計算機中的反映,它將資料以及這些資料上的操作封裝在一起。物件是具有類型別的變數。類和物件是物件導向程式設計技術中的最基本的概念。1 類物件的關係 類是物件的抽象,而物件是類的具體例項。類是抽象的,不占用記憶體,而物件是具體的,占用儲存空...
資料結構筆記2
include include include using namespace std typedef struct sqlist typedef struct lnode lnode,linklist 有序順序表的合併 void combainshunxubiao sqlist a,sqlist ...
資料結構筆記 基礎
一 資料的邏輯結構 1 線性結構的特點是元素之間是一對一的關係,比如鍊錶 陣列 佇列 棧等等這些都是線性結構。2 非線性結構的特點是元素之間可以是任意關係除了一對一,比如集合 無關係 樹 一對多 圖 多對多 二 資料的物理結構 1 順序儲存 元素在記憶體中連續儲存。優點是儲存空間小,缺點是只能使用相...