




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告設(shè)計(jì)題目:圖的基本操作與實(shí)現(xiàn)專業(yè)班 級(jí)學(xué) 生學(xué) 號(hào)指導(dǎo)教師起止時(shí)間年 學(xué)期1. 問題描述: 實(shí)現(xiàn)圖的一些基本操作2. 基本要求: (2) 求每個(gè)頂點(diǎn)的度, 輸出結(jié)果; 3. 測試數(shù)據(jù): 4. 算法思想: (1) 自選存儲(chǔ)結(jié)構(gòu)創(chuàng)建一個(gè)圖: (2) 求每個(gè)頂點(diǎn)的度: (3) 圖的深度優(yōu)先遍歷: (4) 圖的廣度優(yōu)先遍歷: (5) 判斷有向圖的強(qiáng)連通性: (6) 用鄰接矩陣的信息生成鄰接表:6. 數(shù)據(jù)結(jié)構(gòu): 7. 功能模塊圖 8. 源程序: 9. 心得體會(huì): 1. 問題描述 : 實(shí)現(xiàn)圖的一些基本操作2. 基本要求:(1) 自選存儲(chǔ)結(jié)構(gòu) , 輸入含 n 個(gè)頂點(diǎn)(用字符表示頂點(diǎn))和
2、e 條邊的圖G;(2) 求每個(gè)頂點(diǎn)的度, 輸出結(jié)果;(3)指定任意頂點(diǎn)x為初始頂點(diǎn),對(duì)圖G作DFS遍歷,輸出DFS1點(diǎn)序列(提示: 使用一個(gè)棧實(shí)現(xiàn)DFS);(4)指定任意頂點(diǎn)x為初始頂點(diǎn),對(duì)圖G作BFS遍歷,輸出BFS頂點(diǎn)序列(提示:使用一個(gè)隊(duì)列實(shí)現(xiàn)BFS);(5)輸入頂點(diǎn)x,查找圖G:若存在含x的頂點(diǎn),則刪除該結(jié)點(diǎn)及與之相關(guān)連的邊, 并作DFS遍歷(執(zhí)行操作3);否則輸出信 息“無x” ;(6)判斷圖G是否是連通圖,輸出信息“ YE6 / “NO;(7) 如果選用的存儲(chǔ)結(jié)構(gòu)是鄰接矩陣 , 則用鄰接矩陣的信息生成圖G 的鄰接表,即復(fù)制圖G,然再執(zhí)行操作(2);反之亦然。3. 測試數(shù)據(jù):有向圖的
3、頂點(diǎn)數(shù)n 和有向圖的邊數(shù)e 由用戶從鍵盤敲入4. 算法思想:(1) 自選存儲(chǔ)結(jié)構(gòu)創(chuàng)建一個(gè)圖: 通過用戶從鍵盤敲入的兩個(gè)數(shù)值分別確定圖的頂點(diǎn)數(shù)和邊數(shù), 選擇鄰接矩陣存儲(chǔ)結(jié)構(gòu)將圖的結(jié)點(diǎn)信息存儲(chǔ)在一個(gè)順序表中, 圖的 邊信息存儲(chǔ)在一個(gè)二維數(shù)組中。(2) 求每個(gè)頂點(diǎn)的度:1 .鄰接矩陣存儲(chǔ)結(jié)構(gòu)下求每個(gè)頂點(diǎn)的度: 利用圖的鄰接矩陣, 每個(gè)頂點(diǎn)所在行和所在列的邊的權(quán)值如果存在則該頂點(diǎn)的度+1, 依次算出每個(gè)頂點(diǎn)的度, 并且記錄在一個(gè)數(shù)組中輸出。2 . 鄰接表存儲(chǔ)結(jié)構(gòu)下求每個(gè)頂點(diǎn)的度: 定義一個(gè)鄰接邊指針循環(huán)指向頂點(diǎn)的鄰接邊單鏈表頭結(jié)點(diǎn),當(dāng)結(jié)點(diǎn)不空時(shí),該頂點(diǎn)的出度+1, 鄰接邊弧頭結(jié)點(diǎn)的入度+1,依次求出每
4、個(gè)頂點(diǎn)的出度和入度之和就為該頂點(diǎn)的度。(3) 圖的深度優(yōu)先遍歷: 采取鄰接矩陣結(jié)構(gòu),指定任意頂點(diǎn) x 為初始頂點(diǎn)1 .訪問結(jié)點(diǎn)v并標(biāo)記結(jié)點(diǎn)v已訪問;2 . 查找結(jié)點(diǎn) v 的第一個(gè)鄰接結(jié)點(diǎn)w;3 .若結(jié)點(diǎn)v的鄰接結(jié)點(diǎn)w存在,則繼續(xù)執(zhí)行,否則算法結(jié)束;4 . 若結(jié)點(diǎn)w 尚未被訪問,則遞歸訪問結(jié)點(diǎn)w;5 .查找結(jié)點(diǎn)v的w鄰接結(jié)點(diǎn)的下一個(gè)鄰接結(jié)點(diǎn)w,轉(zhuǎn)到步驟3。(4) 圖的廣度優(yōu)先遍歷: 采取鄰接矩陣結(jié)構(gòu),指定任意頂點(diǎn) x 為初始頂點(diǎn),利用順序循環(huán)隊(duì)列以保持訪問過的結(jié)點(diǎn)的順序1. 首先訪問初始結(jié)點(diǎn)v并標(biāo)記結(jié)點(diǎn)v為已訪問;2. 結(jié)點(diǎn) v 入隊(duì)列;3. 當(dāng)隊(duì)列非空時(shí)則繼續(xù)執(zhí)行,否則算法結(jié)束;4. 出隊(duì)列取
5、得隊(duì)頭結(jié)點(diǎn) u;5. 查找 u 的第一個(gè)鄰接結(jié)點(diǎn)w;6. 若u的鄰接結(jié)點(diǎn)w不存在則轉(zhuǎn)到步驟3,否則循環(huán)執(zhí)行下列步驟:若結(jié)點(diǎn)w尚未被訪問,則訪問結(jié)點(diǎn) w并標(biāo)記結(jié)點(diǎn)w為已訪問;結(jié)點(diǎn)w入隊(duì)列;查找結(jié)點(diǎn)u的w鄰接結(jié)點(diǎn)的下一個(gè)鄰接結(jié)點(diǎn)w,轉(zhuǎn)到步驟6。(5) 判斷有向圖的強(qiáng)連通性: 采取鄰接表結(jié)構(gòu),在圖中尋找一個(gè)包含所有頂點(diǎn)且首尾相連的環(huán),若這樣的環(huán)存在,則該圖為強(qiáng)連通圖,否則不為強(qiáng)連通圖。(6) 用鄰接矩陣的信息生成鄰接表: 定義一個(gè)鄰接表的邊信息結(jié)構(gòu)體,將鄰接矩陣的邊信息轉(zhuǎn)換成鄰接表的邊信息存儲(chǔ)到鄰接邊的單鏈表中。5. 模塊劃分:mian(): 主函數(shù)模塊。在主函數(shù)模塊中調(diào)用以下函數(shù):(1) void
6、 CreatGraph(AdjMGraph *G,DataType v,int n,RowColWeight E,int e) : 創(chuàng)建一個(gè)鄰接矩陣存儲(chǔ)結(jié)構(gòu)的圖;(2) void Print(AdjMGraph *G): 輸出圖的鄰接矩陣;(3) void MVertices(AdjMGraph *G,DataType a) :求出鄰接矩陣存儲(chǔ)結(jié)構(gòu)下圖的每個(gè)頂點(diǎn)的度;(4) void CreatLGraph(AdjLGraph *G,DataType v,int n,RowCol d,int e) :用鄰接矩陣的信息生成鄰接表;(5) void LVertices(AdjLGraph *G,D
7、ataType a) :求出鄰接表存 儲(chǔ)結(jié)構(gòu)下圖的每個(gè)頂點(diǎn)的度;(6) int LianTong(AdjLGraph *G,DataType a) :判斷有向圖的強(qiáng)連通性;(7) voidDepthFirstSearch(AdjMGraphG,voidVisit(DataTypeitem):對(duì)圖作DFS遍歷,輸出DFS1點(diǎn)序列;(8) voidBroadFirstSearch(AdjMGraphG,voidVisit(DataTypeitem):對(duì)圖作BFS遍歷,輸出BFS頂點(diǎn)序列;(9) int ChaZhao(AdjMGraph *G,int v) :查找頂點(diǎn) v;(10) void MD
8、elete(AdjMGraph *G,int v) :刪除查找到的結(jié)點(diǎn) v 并刪 除該結(jié)點(diǎn)及與之相關(guān)的邊;6. 數(shù)據(jù)結(jié)構(gòu):(1) 有向圖頂點(diǎn)的數(shù)據(jù)類型DataType 定義如下:typedef int DataType ;(2) 鄰接矩陣存儲(chǔ)結(jié)構(gòu)下圖的結(jié)構(gòu)體定義如下:typedef structSeqList Vertices ; 能模塊圖:8.源程序:源程序存放在八個(gè)文件夾中,文件是順序表的結(jié)構(gòu)體定義和操作函數(shù),文件是順序循環(huán)隊(duì)列的結(jié)構(gòu)體定義和操作函數(shù),文件是鄰接矩陣存儲(chǔ)結(jié)構(gòu)下圖的結(jié)構(gòu)體定 義和操作函數(shù),文件是鄰接矩陣存儲(chǔ)結(jié)構(gòu)下圖的創(chuàng)建函數(shù),文件是鄰接表存儲(chǔ)結(jié)構(gòu)下圖的結(jié)構(gòu)體定義和操作函數(shù),文
9、件是鄰接表存儲(chǔ)結(jié)構(gòu)下圖的創(chuàng)建函數(shù),文件是鄰接矩陣存儲(chǔ)結(jié)構(gòu)下圖的深度優(yōu)先遍歷和廣度優(yōu)先遍歷操作函數(shù),文件圖的基本操作與實(shí)現(xiàn).c是主函數(shù)。(1)/* 文件 */ typedef struct DataType listMaxSize; int size;SeqList;void ListInitiate(SeqList *L)L->size=0;int ListLength(SeqList L)return ;int ListInsert(SeqList *L,int i,DataType x)int j;if(L->size>=MaxSize)printf(" 數(shù)組已
10、滿無法插入! n");return 0;else if(i<0|i>L->size)printf(" 參數(shù)不合法! n");return 0;elsefor(j=L->size;j>i;i-)L->listj=L->listj-1;L->listi=x;L->size+;return 1;int ListDelete(SeqList *L,int i,DataType *x)int j;if(L->size<=0)n");printf(" 順序表已空無數(shù)據(jù)元素可刪!return
11、0;else if(i<0|i>L->size-1)printf(" 參數(shù) i 不合法! n");return 0;else*x=L->listi;for(j=i+1;j<=L->size-1;j+)L->listj-1=L->listj;L->size-;return 1;int ListGet(SeqList L,int i,DataType *x)if(i<0|i>printf(" 參數(shù) i 不合法! n");return 0;else*x=i;return 1;(2)/* 文件 *
12、/typedef structDataType queueMaxQueueSize;int rear;int front;int count;SeqCQueue;void QueueInitiate(SeqCQueue *Q)Q->rear=0;Q->front =0;Q->count =0;int QueueNotEmpty(SeqCQueue Q)if !=0) return 1;else return 0;int QueueAppend(SeqCQueue *Q,DataType x)if(Q->count>0&&Q->rear=Q-&
13、gt;front)printf(" 隊(duì)列已滿無法插入!");return 0;elseQ->queue Q->rear=x;Q->rear =(Q->rear +1)%MaxQueueSize;Q->count +;return 1;int QueueDelete(SeqCQueue *Q,DataType *d)if(Q->count =0)printf(" 隊(duì)列已空無數(shù)據(jù)出隊(duì)列 !n");return 0;else*d=Q->queueQ->front;Q->front=(Q->front+
14、1)%MaxQueueSize;Q->count -;return 1;int QueueGet(SeqCQueue Q,DataType*d)if =0)printf(" 隊(duì)列已空無數(shù)據(jù)出隊(duì)列 !n");return 0;else*d= ;return 1;(3)/* 文件 */#include""typedef structSeqList Vertices; ow,Ek.col,Ek.weight); orce=i; G->ai.adj=NULL;dj;while(p!=NULL)q=p->next;free(p); p=q;ata
15、=vertex; dj; dj=p; dj;while(curr!=NULL&&curr->dest!=v2)dj=curr->next;free(curr);G->numOfEdges-;else if(curr!=NULL&&curr->dest=v2&&pre!=NULL) dj;if(p!=NULL)return p->dest; dj;while(p!=NULL) dj; dj;while(q!=NULL)bi+;q=q->next;for(i=0;i<G->numOfVerts;i+)i
16、f(bi=1)k+;p=G->aG->numOfVerts-1.adj;if(k=G->numOfVerts&&p->dest=a0)return 1;elsereturn 0;(6)/* 文件 */typedef structint row; ow,dk.col);(7)/* 文件 */void Visit(DataType item)printf("%d ",item);void DepthFSearch(AdjMGraph G,int v,int visited,void Visit(DataType item)*/#include<>#include<>#include<>typedef int DataType;ow,&rcwi.col,&rcwi.weight);CreatGraph(&g1,a,n,rcw,e);ol=rcwi.col;rwci.row=rcwi.row;CreatLGraph(&g2,a, 得體會(huì):在本次數(shù)據(jù)結(jié)構(gòu)的課程設(shè)計(jì)中我設(shè)計(jì)的題目是圖的基本操作與實(shí)現(xiàn),經(jīng)過
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(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ǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年中國可伸縮乒乓球網(wǎng)行業(yè)市場全景分析及前景機(jī)遇研判報(bào)告
- 2024-2025學(xué)年吉林省通化市梅河口五中高二下學(xué)期4月月考政治試題及答案
- 中國橡膠和塑料制品行業(yè)調(diào)查測報(bào)告
- 2025年中國電腦充電器行業(yè)市場發(fā)展現(xiàn)狀及投資戰(zhàn)略咨詢報(bào)告
- 2025-2031年中國家用機(jī)器人行業(yè)市場需求預(yù)測及投資戰(zhàn)略規(guī)劃報(bào)告
- 中國商業(yè)收款機(jī)行業(yè)市場調(diào)查研究及投資前景展望報(bào)告
- 男士發(fā)型培訓(xùn)課件
- 中國水晶燈工程市場競爭格局及投資戰(zhàn)略規(guī)劃報(bào)告
- 2025-2030年中國液冷數(shù)據(jù)中心行業(yè)市場全景調(diào)研及未來趨勢研判報(bào)告
- 2025年 武穴市市級(jí)機(jī)關(guān)遴選考試筆試試題附答案
- 《化療藥物不良反應(yīng)處理》課件
- 企業(yè)國際化人才績效考核體系優(yōu)化研究
- 第14課 古代絲路與工藝美術(shù)交流 課件-2024-2025學(xué)年高中美術(shù)魯美版美術(shù)鑒賞
- 上海寶山區(qū)公開招聘社區(qū)工作者考試高頻題庫帶答案2025年
- 《老年服務(wù)禮儀與溝通》高職養(yǎng)老服務(wù)類專業(yè)全套教學(xué)課件
- 自來水安裝施工合同范例二零二五年
- 學(xué)科融合在初中音樂教學(xué)中的實(shí)踐研究
- 《分子間作用力理論》課件
- 2025春季學(xué)期國開電大本科《管理英語3》一平臺(tái)在線形考綜合測試形考任務(wù)試題及答案
- 小區(qū)安全隱患課件
- 國家安全共同守護(hù)-國家安全教育日主題班會(huì)課件-2024-2025學(xué)年初中主題班會(huì)課件
評(píng)論
0/150
提交評(píng)論