三、棧和隊列
1、知識點:
● 棧的定義:操作受限的線性表
● 特點:后進先出
● 棧的存儲結構:順序,鏈接
/ push(s,d)
● 棧的基本操作:
\ pop(s)
棧定義:
struct {
datatype data[max_num];
int top;
};
●隊列定義
特點:先進先出
/入隊列 in_queue(Q,x)
●隊列的操作:
\出隊列 del_queue(Q)
●隊列存儲結構:
鏈隊列:
Typedef struct node{
Datatype data;
Struct node *next;
}NODE;
Typedef struct {
NODE *front;
NODE *rear;
}Queue;
順序隊列:
struct {
datatype data[max_num];
int front,rear;
};
問題:
隊列ó線性表
假溢出<=循環隊列
隊列滿,隊列空條件一樣<=浪費一個存儲空間
遞歸
定義:問題規模為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) {
if(p==NULL) return 0;
else return(function(p->next));
}
樹與二叉樹
一、 知識點:
1. 樹的定義: data_struct(D,R);
其中:D中有一個根,把D和出度去掉,可以分成M個部分.
D1,D2,D3,D4,D5…DM
R1,R2,R3,R4,R5…RM
而子樹Ri形成樹.
1) 遞歸定義 高度
2) 結點個數=1 |
此樹的高度為2 |
2.二叉樹定義:
結點個數>=0 .
3. 術語:左右孩子,雙親,子樹,度,高度等概念.
4. 二叉樹的性質
●層次為I的二叉樹 I層結點 2I 個
●高度為H的二叉樹結點 2H+1-1個
●H(點)=E(邊)+1
●個數為N的完全二叉樹高度為|_LOG2n_|
●完全二叉樹結點編號:從上到下,從左到右.
i結點的雙親: | |_i/2_| | |_i-1/2_| | 1 | ||||||
i結點的左孩子: | 2i | 2i+1 | 2 | 3 | |||||
i結點的右孩子: | 2i+1 | 2i+2 | 4 | 5 | 6 | 7 | |||
(根) | 1為起點 | 0為起點 |
二叉樹的存儲結構:
1) 擴展成為完全二叉樹,以一維數組存儲。
A | |||||||||
B | C | ||||||||
D | E | F | |||||||
G | H | I |
數組下標 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 |
元素 | A | B | C | D | E | F | G | H | I |
2) 雙親表示法
數組下標 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 |
元素 | A | B | C | D | E | F | G | H | I |
雙親 | -1 | 0 | 0 | 1 | 2 | 2 | 3 | 3 | 4 |
3) 雙親孩子表示法
數組下標 | 0 | 1 | 2 | 3 | 4 | 5 | … |
元素 | A | B | C | D | E | F | … |
雙親 | -1 | 0 | 0 | 1 | 2 | 2 | … |
左子 | 1 | 3 | 4 | … | |||
右子 | 2 | -1 | 5 | … |
結構:
typedef struct {
datatype data;
int parent;
int lchild;
int rchild;
}NODE;
NODE tree[N]; // 生成N個結點的樹
4) 二叉鏈表
5) 三叉鏈表
6) 哈夫曼樹
5.二叉樹的遍歷
先根 \
中根 棧 中根遍歷(左子樹)根(右子樹),再用相同的方法處理左子樹,右子樹.
后根 /
先,中序已知求樹:先序找根,中序找確定左右子樹.
層次遍歷(隊列實現)
6.線索二叉樹(穿線樹)
中序線索二樹樹目的:利用空指針直接得到中序遍歷的結果.
手段(方法):左指針為空,指向前趨,右指針為空,指向后繼.
結點結構:
ltag | Lch | Data | rch | rtag |
Ltag=0,lch指向左孩子,ltag=1,指向前趨結點
Rtag=0,rch指向右孩子;rtag=1,指向后繼結點
中序遍歷: 1) 找最左結點(其左指針為空)
2) 當該結點的rtag=1,該結點的rch指向的就為后繼
3) 當rtag=0,后繼元素為右子樹中最左邊那個
N個結點的二樹有空指針N+1個
上一頁 [1] [2] [3] [4] [5] [6] [7] [8] [9] 下一頁
轉帖于:軟件水平考試_考試吧- 推薦給朋友
- 收藏此頁
·網絡工程師資料:網絡體系結構-軟考網絡類題解 (2008-4-25 14:33:38)
·計算機網絡基礎網絡拓撲結構及優缺點分析 (2008-2-22 14:04:32)
·網絡工程師必知:靜態路由協議配置方法 (2008-2-22 14:03:39)
·計算機網絡尼奎斯特 香農公式例題解析 (2008-2-22 14:02:35)
·軟考復習:因特網IP的分類、尋址規則及子網掩碼 (2008-2-22 13:57:21)