第二天
轉眼又過了一周了,前面一周裡面我編了一些程式:鍊錶,長整型數相加,三元組表轉置以及一些簡單的函式.其實有些演算法想想是很簡單,不過寫起來還是需要一定耐心和c基礎的,如果你自己覺得各演算法都很懂了,不妨開機編編試試.或許會有一些新的發現與體會.
棧和佇列
1、知識點:
● 棧的定義:操作受限的線性表
● 特點:後進先出
● 棧的儲存結構:順序,鏈結
/ push(s,d)
● 棧的基本操作:
/ pop(s)
棧定義:
struct ;
●佇列定義
特點:先進先出
/入佇列 in_queue(q,x)
●佇列的操作:
/出佇列 del_queue(q)
●佇列儲存結構:
鏈佇列:
typedef struct nodenode;
typedef struct queue;
順序佇列:
struct ;
問題:佇列ó線性表
假溢位<=迴圈佇列
佇列滿,佇列空條件一樣<=浪費乙個儲存空間
遞迴
定義:問題規模為n的解依賴於小規模問題的解。問題的求解通過小規模問題的解得到。
包括二個步驟:
1) 遞推 6!=>5!=>4!=>3!=>2!=>1!=>0!
2) 回歸 720<=120<=24<=6 <=2 <=1 <=0
遞迴工作棧實現遞迴的機制。
2、有關演算法:
1) 順序,鍊錶結構下的出棧,入棧
2) 迴圈,佇列的入佇列,出佇列。
3) 鏈佇列的入佇列,出佇列。
4) 表示式計算:字尾表示式 35+6/4368/+*-
中綴表示式 (3+5)/6-4*(3+6/8)
由於中綴比較難處理,計算機內一般先將中綴轉換為字尾。
運算:碰到運算元,不運算,碰到操符,運算其前兩個運算元。
中綴=>字尾
5) 迷宮問題
6) 線性鍊錶的遞迴演算法 乙個鍊錶=乙個結點+乙個鍊錶
int fuction(node *p)
樹與二叉樹
一、 知識點:
1. 樹的定義:data_struct(d,r);
其中:d中有乙個根,把d和出度去掉,可以分成m個部分.
d1,d2,d3,d4,d5…dm
r1,r2,r3,r4,r5…rm
而子樹ri形成樹.
1) 遞迴定義 高度
2) 結點個數=1
o--0oo
--1ooo
o--2
此樹的高度為2
2.二叉樹定義:
結點個數》=0 .
3. 術語:左右孩子,雙親,子樹,度,高度等概念.
4. 二叉樹的性質
●層次為i的二叉樹 i層結點 2i 個
●高度為h的二叉樹結點 2h+1-1個
●h(點)=e(邊)+1
●個數為n的完全二叉樹高度為|_log2n_|
●完全二叉樹結點編號:從上到下,從左到右.
i結點的雙親:
|_i/2_|
|_i-1/2_|
1i結點的左孩子:
2i2i+123
i結點的右孩子:
2i+1
2i+245
67(根)1為起點
0為起點
二叉樹的儲存結構:
1) 擴充套件成為完全二叉樹,以一維陣列儲存。 ab
cdef
ghi
陣列下標01
2345
6789
1011
12元素ab
cdef
ghi
2) 雙親表示法
陣列下標01
2345
678元素
abcd
efgh
i雙親-10
0122
334
3) 雙親孩子表示法
陣列下標01
2345
…元素ab
cdef
…雙親-10
0122
…左子13
4…右子2
-15…
結構:typedef struct node;
node tree[n]; // 生成n個結點的樹
4) 二叉鍊錶
5) 三叉鍊錶
6) 哈夫曼樹
5.二叉樹的遍歷
先根 /
中根 棧 中根遍歷(左子樹)根(右子樹),再用相同的方法處理左子樹,右子樹.
後根 /
先,中序已知求樹:先序找根,中序找確定左右子樹.
層次遍歷(佇列實現)
6.線索二叉樹(穿線樹)
中序線索二樹樹目的:利用空指標直接得到中序遍歷的結果.
手段(方法):左指標為空,指向前趨,右指標為空,指向後繼.
結點結構:
ltag
lchdata
rchrtag
ltag=0,lch指向左孩子,ltag=1,指向前趨結點
rtag=0,rch指向右孩子;rtag=1,指向後繼結點
中序遍歷: 1) 找最左結點(其左指標為空)
2) 當該結點的rtag=1,該結點的rch指向的就為後繼
3) 當rtag=0,後繼元素為右子樹中最左邊那個
n個結點的二樹有空指標n+1個
週六我去了周sir的辦公室,他很熱情,我問的是中序線索化二叉樹的問題(遞迴),關於這個問題我會在以後的筆記中作重點補充。我在這學校從來沒有碰到 過像他這樣熱情的老師,真的,大一的時候我們學校就開了c,當時我就連#include這句話的意思都不曉得,別說是讓我 寫程式了(到這份上也不怕把醜事都抖出來了:《資料結構》的課程設計也是哈科大的littlebob兄幫我做的,很遺憾,他高程就差幾分,希望他早日成 功,我們都要向他學習)等於說我的c知識九成都是在大二下學期的時候學的。而且全是自學的。拿這個週末來說吧。我三天時間就看完了一本c語言大全。當然, 並不是從頭到尾,只是根據自己的實際情況,重點是指標和資料結構那塊。c最要的便是指標。程式設計師考試下午試題最重要的便是遞迴問題(1~2道,沒有掌握就 沒希望了哦)。我說這些並不是為了表明自己多麼用功,只是希望每位"學者"都有所側重。
程式設計師資料結構筆記4
第四天 列舉 揹包問題 列舉策略 1 可能的方案 2n 2 對每一方案進行判斷.列舉法一般流程 while 還有其他可能方案 列舉策略 例 把所有排列列舉出來 p6 6 min 123456 max 654321 a1a2a3a4a5a6 下一排列 比如 312654的下和種情況 314256 遞迴...
黑馬程式設計師 學習筆記 資料結構 概念
資料結構與數學 計算機硬體和軟體有十分密切的關係。資料結構是介於數學 計算機硬體和計算機軟體之間的一門電腦科學與技術專業的核心課程,是高階程式語言 編譯原理 作業系統 資料庫 人工智慧等課程的基礎。同時,資料結構技術也廣泛應用於資訊科學 系統工程 應用數學以及各種工程技術領域。資料結構課程集中討論軟...
黑馬程式設計師 學習筆記 資料結構 順序表
一 儲存 線性表的順序儲存是指在記憶體中用位址連續的一塊儲存空間順序存放線性表的各元素,用這種儲存形式儲存的線性表稱其為順序表。因為記憶體中的位址空間是線性的,因此,用物理上的相鄰實現資料元素之間的邏輯相鄰關係是既簡單,又自然的。如圖2.1 所示。設a 的儲存位址為loc a 每個資料元素佔d個儲存...