




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、1. 將森林轉(zhuǎn)換為二叉樹。用左子女-右兄弟表示實(shí)現(xiàn)的樹定義:typedef struct node TreeData data; struct node * firstChild, * nextSibling; TreeNode;2. 圖的鄰接矩陣、鄰接表的存儲(chǔ)表示。圖的鄰接矩陣存儲(chǔ):兩點(diǎn)之間有邊矩陣對應(yīng)的位置處填1,兩點(diǎn)之間無邊對應(yīng)位置處填0EdgeData EdgeNumVerticesNumVertices; 圖的鄰接表存儲(chǔ): 2. 計(jì)算AOE網(wǎng)絡(luò)的關(guān)鍵路徑。完成整個(gè)工程所需的時(shí)間取決于從源點(diǎn)到匯點(diǎn)的最長路徑長度, 即在這條路徑上所有活動(dòng)的持續(xù)時(shí)間之和。這條路徑長度最長的路徑就叫做關(guān)鍵路
2、徑關(guān)鍵活動(dòng):最早開始時(shí)間和最晚開始時(shí)間相等4. 畫出下圖的結(jié)構(gòu),并分別給出以A頂點(diǎn)開始的深度優(yōu)先遍歷和廣度優(yōu)先遍歷。ABDCFE深度優(yōu)先搜索:ABDCEF廣度優(yōu)先搜索:ABCDEF5. (1) 哈希函數(shù)常用的構(gòu)造方法有哪些?處理沖突的方法有哪些?(2) 用除留余數(shù)法構(gòu)建哈希表,并以線性探測再散列處理沖突。1、常用的構(gòu)造方法:直接定址法、數(shù)字分析法、平方取中法、折疊法、除留余數(shù)法、隨機(jī)數(shù)法處理沖突的方法:開放定址法、再哈希法、鏈地址法2、除留余數(shù)法:H(key) = key % p -m為表長,p為不大于m的素?cái)?shù)P為素?cái)?shù)?如key(關(guān)鍵字):12 39 18 24 33 21 若p = 9 則哈
3、希函數(shù)值為:3 3 0 6 6 3可見,當(dāng)p的因子中含有素?cái)?shù)3,則所有含因子3的關(guān)鍵字都對應(yīng)到“3的倍數(shù)”的地址上,從而增加了沖突的可能!/*表長為6,關(guān)鍵字個(gè)數(shù)6,p<=m且p為素?cái)?shù),故p取5,但是這樣最后一個(gè)數(shù)21將永遠(yuǎn)不會(huì)放到下標(biāo)為5的地方!那么這個(gè)p的取法不是有錯(cuò)嗎?還是說表長必須比給的關(guān)鍵字個(gè)數(shù)大?*/如key(關(guān)鍵字):12 39 18 24 33 21 若p = 7 則哈希函數(shù)值為: 5 4 4 3 5 0先行探測在散列處理沖突:Key = 18:18 % 7 = 4(沖突)(4+1)%7=5(沖突)(5+1)%7=6key = 33: 33%7=5(沖突)(5+1)%7=
4、6(沖突)(6+1)%7=0Key = 21:21%7 = 0(沖突)(0+1)%7 = 1所以最后得:5 4 6 3 0 101234563321243912186. 證明二叉樹性質(zhì):n0=n2+1 ( n0度為0的結(jié)點(diǎn);n2:度為2的結(jié)點(diǎn) )n1為度為1的節(jié)點(diǎn),e表示二叉樹的邊數(shù);這里用到的一個(gè)等式是二叉樹邊的兩種表達(dá):e=n0+n1+n2-1 /每一個(gè)節(jié)點(diǎn)對應(yīng)一條邊,根節(jié)點(diǎn)除外所以減一e=2*n2+n1 /2倍的度為2的節(jié)點(diǎn)數(shù)目加上度為1的節(jié)點(diǎn)數(shù)目,就是邊的數(shù)目得:n0 = n2 + n17. 求最小生成樹 1、Prim(普里姆)算法從連通圖中的某一頂點(diǎn) u0 出發(fā), 選擇與它關(guān)聯(lián)的具有
5、最小權(quán)值的邊,將其頂點(diǎn)加入到生成樹頂點(diǎn)集合中2、Kruskal(克魯斯卡爾)算法對每一條邊按照權(quán)值從小到大排序,每一次選擇最小的權(quán)值的邊,注意避免選擇出現(xiàn)環(huán)的邊!8.以權(quán)重集合 4, 5, 6, 7, 8 構(gòu)建哈夫曼樹(霍夫曼樹)。帶權(quán)路徑長度達(dá)到最小的二叉樹即為哈夫曼樹。 9. 給出用下列關(guān)鍵字構(gòu)建大頂堆的全過程,關(guān)鍵字集合為 70 40 55 81 74 18 46 70 01234567704055817418467010. 給出上述集合數(shù)據(jù)的快速排序的過程選定初始關(guān)鍵字temp,首先從右向左遍歷,當(dāng)遇到比temp小的時(shí)候,就讓ai = aj, i+;然后重左向右遍歷,當(dāng)遇到比temp大
6、的時(shí)候,就讓aj = ai, j-;然后循環(huán)做上述兩個(gè)過程,直到i=j時(shí),就讓ai = temp;這時(shí)樞軸就是ai;然后遞歸調(diào)用從(l, i-1)和(i+1,r);11. 請按照給出的數(shù)字順序構(gòu)造二叉排序樹。如:50 30 80 20 40 90 10 25 35 85 23 8812. 計(jì)算從頂點(diǎn)b到其它頂點(diǎn)的最短路徑。答題不能這樣寫,這樣寫最多2分,要寫出步驟!這只是草稿,方便看!Dijkstra 逐步求解的過程:<b, a, 2><b, e, 10><b, a, c, 22><b, e, d, 23><b, a, c, f, 28&g
7、t;13. 二叉樹計(jì)數(shù)。1、由二叉樹的前序序列和中序序列可唯一地確定一棵二叉樹前序序列 ABHFDECKG /確定根節(jié)點(diǎn)中序序列 HBDFAEKCG /在前序序列確定根節(jié)點(diǎn)的基礎(chǔ)上,確定左右孩子節(jié)點(diǎn) 2、計(jì)算具有 n 個(gè)結(jié)點(diǎn)的不同二叉樹的棵數(shù)14. 給出求順序表A和B并集和交集的程序?qū)崿F(xiàn),要求并集存儲(chǔ)在表A當(dāng)中。運(yùn)行結(jié)果:La :0 1 2 3 4 5 6 7 8 9Lb :0 2 4 6 8 10 12 14 16 18BingJi :0 1 2 3 4 5 6 7 8 9 10 12 14 16 18JiaoJi :0 2 4 6 8請按任意鍵繼續(xù). . .代碼:#include <
8、iostream>#define NewSeqList (SeqList*)malloc(sizeof(SeqList)#define NewListData (int*)malloc(40 * sizeof(int)using namespace std;typedef struct int *data, length;SeqList;void SetL(SeqList *&L) cout << "請輸入共多少數(shù):" cin >> L->length;for (int i = 0; i < L->length; +i
9、) cin >> L->datai;void Show(SeqList *&L) for (int i = 0; i < L->length; +i) cout << L->datai << " " cout << endl;bool InL(SeqList *&L, int &key) for (int i = 0; i < L->length; +i) if (key = L->datai) return true;return false;void Ins
10、ert(SeqList *&L, int key) L->dataL->length+ = key; void Delete(SeqList *&L, int &pos) /pos代表要?jiǎng)h除的元素的下標(biāo)for (int i = pos; i < L->length - 1; +i) L->datai = L->datai + 1;-L->length;void Union(SeqList *&La, SeqList *&Lb) for (int i = 0; i < Lb->length; +i) i
11、f (!InL(La, Lb->datai) Insert(La, Lb->datai);/如果Lb中元素不在La中就把該元素插入到La中void Intersect(SeqList *&La, SeqList *&Lb) for (int i = 0; i < La->length; +i) if (!InL(Lb, La->datai) Delete(La, i); -i; /如果La中元素不在Lb中就把La中該元素刪除int main()SeqList *La = NewSeqList, *Lb = NewSeqList;/NewSeqLis
12、t 用宏定義創(chuàng)建結(jié)構(gòu)體La->data = NewListData;/NewListData 用宏定義創(chuàng)建數(shù)組Lb->data = NewListData;La->length = Lb->length = 0;SetL(La);/向順序表La輸入數(shù)據(jù)SetL(Lb);/向順序表Lb輸入數(shù)據(jù)cout << "輸出集合La:" Show(La);cout << "輸出集合Lb:" Show(Lb);Union(La, Lb);/并集cout << "并集結(jié)果:" Show(La
13、);Intersect(La, Lb);/交集cout << "交集結(jié)果:" Show(La);system("pause");return 0;15. 用C語言給出鄰接表的定義。給出構(gòu)建鄰接表的源程序(先后輸入頂點(diǎn)表和邊表)。編寫程序求頂點(diǎn)表中頂點(diǎn)V的入度和出度。無向圖的每個(gè)頂點(diǎn)的入度和出度相等,所以只要求出入度即可。有向圖求入度和出度有兩種方法:1、 求入度一個(gè)一個(gè)遍歷,遇到即ans+2、 在一個(gè)結(jié)構(gòu)體中建立兩個(gè)表,入度表,和出度表,查詢的時(shí)候做相同的遍歷即可法1:(按無向圖來處理的,若按有向圖處理只需刪去建tail->head的代
14、碼即可)運(yùn)行結(jié)果:please input VertexNum and EdgeNum :4 5please input VertexNode :A B C Dplease input Edge as A B 10 :A C 2A B 1A D 3B C 1B D 5A Chu Du is : 3B Chu Du is : 3C Chu Du is : 2D Chu Du is : 2A Ru Du is : 3B Ru Du is : 3C Ru Du is : 2D Ru Du is : 2請按任意鍵繼續(xù). . .代碼:#include <iostream>#include &
15、lt;cstring>using namespace std;const int VertexNum = 10;typedef struct nodeint dex, cost;struct node *link;EdgeNode;typedef char VertexData;typedef struct VertexData data;EdgeNode *first_link;VertexNode;typedef struct VertexNode VexListVertexNum;int n, e;AdjGraph;int FindPos(AdjGraph &G, char
16、 &ch) for (int i = 0; i < G.n; +i) if (G.VexListi.data = ch) return i;void CrateGraph(AdjGraph &G) cout << "please input VertexNum and EdgeNum : " << endl; cin >> G.n >> G.e; cout << "please input VertexNode : " << endl;for (int i =
17、0; i < G.n; +i) cin >> G.VexListi.data; G.VexListi.first_link = NULL; cout << "please input Edge as A B 10 : " << endl;for (int i = 0; i < G.e; +i) char ch1, ch2;int head, tail, key;cin >> ch1 >> ch2 >> key;head = FindPos(G, ch1);tail = FindPos(G,
18、ch2);EdgeNode *p = new EdgeNode;p->cost = key;p->dex = tail;p->link = G.VexListhead.first_link;G.VexListhead.first_link = p;p = new EdgeNode;p->cost = key;p->dex = head;p->link = G.VexListtail.first_link;G.VexListtail.first_link = p;void EveryChuDu(AdjGraph &G) for (int i = 0;
19、i < G.n; +i) int ans = 0;EdgeNode *p = G.VexListi.first_link;while (p) +ans; p = p->link; cout << G.VexListi.data << " Chu Du is : " << ans << endl;cout << endl << endl;void EveryRuDu(AdjGraph &G) EdgeNode *p;for (int i = 0; i < G.n; +i) int
20、 ans = 0;for (int j = 0; j < G.n; +j) if (j = i) continue;p = G.VexListj.first_link;while (p) if (p->dex = i) +ans; p = p->link; cout << G.VexListi.data << " Ru Du is : " << ans << endl;cout << endl;int main() AdjGraph G;CrateGraph(G);EveryChuDu(G);Ev
21、eryRuDu(G);system("pause");return 0;法2 :按照有向圖來處理的:運(yùn)行結(jié)果:4 5A B C DA BA CA DB DB CA In Du is : 0B In Du is : 1C In Du is : 2D In Du is : 2A Out Du is : 3B Out Du is : 2C Out Du is : 0D Out Du is : 0請按任意鍵繼續(xù). . .代碼:#include <iostream>#include <cstring>using namespace std;typedef st
22、ruct nodeint dex;struct node *link; EdgeNode;typedef char VertexData;typedef struct VertexData data;EdgeNode *first_link;VertexNode;const int VertexNum = 10;typedef structVertexNode InVexListVertexNum;VertexNode OutVexListVertexNum;int n, e;AdjGraph;int FindPos(AdjGraph &G, char ch) for (int i =
23、 0; i < G.n; +i) if (ch = G.InVexListi.data) return i;void CreateGraph(AdjGraph &G)cin >> G.n >> G.e;for (int i = 0; i < G.n; +i) cin >> G.InVexListi.data; G.OutVexListi.data = G.InVexListi.data;G.OutVexListi.first_link = G.InVexListi.first_link = NULL; char ch1, ch2;int head, tail;for (int i = 0; i < G.e; +i) cin >> ch1 >> ch2;head = FindPos(G, ch1);tail = FindPos(G, ch2);EdgeNode *p = new EdgeNode;p->dex = tail;p->link = G.OutVexListhead.first_link;G.OutVexLi
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年出版物發(fā)行零售項(xiàng)目建議書
- 2025至2030年中國氣體質(zhì)量流量控制器數(shù)據(jù)監(jiān)測研究報(bào)告
- 第六單元名著導(dǎo)讀《海底兩萬里》教學(xué)設(shè)計(jì)-2023-2024學(xué)年統(tǒng)編版語文七年級(jí)下冊
- 第13課 網(wǎng)絡(luò)安全防范 教學(xué)設(shè)計(jì) 2024-2025學(xué)年浙教版(2023)初中信息技術(shù)八年級(jí)上冊
- 第4課《一著驚海天》教學(xué)設(shè)計(jì) 2024-2025學(xué)年統(tǒng)編版語文八年級(jí)上冊
- 2025年有關(guān)幼兒園中班語言標(biāo)準(zhǔn)教案范文集合
- 新型儲(chǔ)能投資機(jī)會(huì)與風(fēng)險(xiǎn)分析
- 太陽能熱電聯(lián)產(chǎn)技術(shù)方案的選擇與分析
- Unit4 Lesson1 My family photo教學(xué)設(shè)計(jì) 2024-2025學(xué)年冀教版(2024)七年級(jí)英語上冊
- 低空通信與信息服務(wù)的創(chuàng)新模式
- 2025人教版一年級(jí)下冊數(shù)學(xué)教學(xué)進(jìn)度表
- DeepSeek教案寫作指令
- 休學(xué)復(fù)學(xué)申請書
- 2025年四川司法警官職業(yè)學(xué)院高職單招職業(yè)適應(yīng)性測試近5年??及鎱⒖碱}庫含答案解析
- 新建污水處理廠工程EPC總承包投標(biāo)方案(技術(shù)標(biāo))
- 山東省德州市2024-2025學(xué)年高三上學(xué)期1月期末生物試題(有答案)
- 《宏觀經(jīng)濟(jì)管理研究》課件
- 本人報(bào)廢車輛委托書
- 汪小蘭有機(jī)化學(xué)課件(第四版)6
- 建筑公司內(nèi)部管理流程-課件PPT
- 學(xué)習(xí)美術(shù)新課標(biāo)的心得體會(huì)
評論
0/150
提交評論