版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
數(shù)據(jù)結(jié)構(gòu)實驗報告
目的要求1.掌握圖的存儲思想及其存儲實現(xiàn)..2.掌握圖的深度、廣度優(yōu)先遍歷算法思想及其程序?qū)崿F(xiàn)..3.掌握圖的常見應(yīng)用算法的思想及其程序?qū)崿F(xiàn)..實驗內(nèi)容1.鍵盤輸入數(shù)據(jù);建立一個有向圖的鄰接表..2.輸出該鄰接表..3.在有向圖的鄰接表的基礎(chǔ)上計算各頂點的度;并輸出..4.以有向圖的5.采用鄰接表存儲實現(xiàn)6.采用鄰接表存儲實現(xiàn)7.在主函數(shù)中設(shè)計一個簡單的鄰接表為基礎(chǔ)實現(xiàn)輸出它的拓?fù)渑判蛐蛄?.無向圖的深度優(yōu)先遞歸遍歷..無向圖的廣度優(yōu)先遍歷..菜單;分別調(diào)試上述算法..源程序:主程序的頭文件:隊列#include<stdio.h>#include<stdlib.h>#defineTRUE1#defineFALSE0#defineOK1#defineERROR0#defineOVERFLOW-2typedefintQElemType;typedefstructQNode{//隊的操作QElemTypedata;structQNode*next;}QNode;*QueuePtr;typedefstruct{QueuePtrfront;QueuePtrrear;}LinkQueue;voidInitQueueLinkQueue&Q{//初始化隊列Q.front=Q.rear=QueuePtrmallocsizeofQNode;ifQ.frontexitOVERFLOW;//存儲分配失敗Q.front->next=NULL;}intEnQueueLinkQueue&Q;QElemTypee//插入元素e為Q的新的隊尾元素{QueuePtrp;p=QueuePtrmallocsizeofQNode;ifpexitOVERFLOW;p->data=e;
p->next=NULL;Q.rear->next=p;Q.rear=p;returnOK;}intDeQueueLinkQueue&Q;QElemType&e//刪除Q的隊頭元素;用e返回其值{ifQ.front==Q.rearreturnERROR;QueuePtrp;p=Q.front->next;e=p->data;Q.front->next=p->next;ifQ.rear==pQ.rear=Q.front;freep;returnOK;}主程序:#include<stdio.h>#include<stdlib.h>#include"duilie.h"#defineTRUE1#defineFALSE0#defineStatusint#defineMAX_VERTEX_NUM8/*頂點最大個數(shù)#defineVertexTypechar/*頂點元素類型enumBOOlean{False;True};*/*/BOOleanvisitedMAX_VERTEX_NUM;//全局變量——訪問標(biāo)志數(shù)組typedefstructArcNode{intadjvex;structArcNode*nextarc;intweight;/*邊的權(quán)*/}ArcNode;/*表結(jié)點*/typedefstructVNode{intdegree;indegree;/*頂點的度;入度*/VertexTypedata;ArcNode*firstarc;}VNode/*頭結(jié)點*/;AdjListMAX_VERTEX_NUM;typedefstruct{AdjListvertices;intvexnum;arcnum;/*頂點的實際數(shù);邊的實際數(shù)*/}ALGraph;//建立圖的鄰接表voidcreat_linkALGraph*G{inti;j;ArcNode*s;
printf"請依次輸入頂點數(shù)、邊數(shù):";scanf"%d%d";&G->vexnum;&G->arcnum;fori=0;i<G->vexnum;i++{G->verticesi.data='A'+i;G->verticesi.firstarc=NULL;}fori=0;i<G->vexnum;{printf"請輸入頂點的數(shù)組坐標(biāo)若退出;請輸入-1:";scanf"%d";&i;ifi==-1break;printf"請輸入頂點所指向下一個頂點的數(shù)組坐標(biāo):";scanf"%d";&j;s=ArcNode*mallocsizeofArcNode;s->adjvex=j;s->nextarc=G->verticesi.firstarc;G->verticesi.firstarc=s;}}//輸出鄰接表voidvisitALGraphG{inti;ArcNode*p;printf"%4s%6s%18s\n";"NO";"data";"adjvexsofarcs";fori=0;i<G.vexnum;i++{printf"%4d%5c";i;G.verticesi.data;forp=G.verticesi.firstarc;p;p=p->nextarcprintf"%3d";p->adjvex;printf"\n";}}//計算各頂點的度及入度voidcacuALGraph*G{ArcNode*p;inti;fori=0;i<G->vexnum;i++{G->verticesi.degree=0;G->verticesi.indegree=0;}//度與初度初始化為零fori=0;i<G->vexnum;i++forp=G->verticesi.firstarc;p;p=p->nextarc{G->verticesi.degree++;G->verticesp->adjvex.degree++;G->verticesp->adjvex.indegree++;}
}voidprint_degreeALGraphG{inti;printf"\nNomdatadegreeindegree\n";fori=0;i<G.vexnum;i++printf"\n%4d%5c%7d%8d";i;G.verticesi.data;G.verticesi.degree;G.verticesi.indegree;printf"\n";}//拓?fù)渑判騍tatusTopologiSortALGraphG{inti;count;top=0;stack50;ArcNode*p;cacu&G;print_degreeG;printf"\nTopologiSortis\n";fori=0;i<G.vexnum;i++ifG.verticesi.indegreestacktop++=i;count=0;whiletop=0{i=stack--top;ifcount==0printf"%c";G.verticesi.data;elseprintf"-->%c";G.verticesi.data;count++;forp=G.verticesi.firstarc;p;p=p->nextarcif--G.verticesp->adjvex.indegreestacktop++=p->adjvex;}ifcount<G.vexnumreturnFALSE;elsereturnTRUE;}//在圖G中尋找第v個頂點的第一個鄰接頂點intFirstAdjVexALGraphG;intv{ifG.verticesv.firstarcreturn0;elsereturnG.verticesv.firstarc->adjvex;}//在圖G中尋找第v個頂點的相對于u的下一個鄰接頂點intNextAdjVexALGraphG;intv;intu{ArcNode*p;p=G.verticesv.firstarc;whilep->adjvex=up=p->nextarc;//在頂點v的弧鏈中找到頂點uifp->nextarc==NULLreturn0;//若已是最后一個頂點;返回0
elsereturnp->nextarc->adjvex;//返回下一個鄰接頂點的序號}//采用鄰接表存儲實現(xiàn)無向圖的深度優(yōu)先遞歸遍歷voidDFSALGraphG;inti{intw;visitedi=True;//訪問第i個頂點printf"%d->";i;forw=FirstAdjVexG;i;w;w=NextAdjVexG;i;wifvisitedwDFSG;w;//對尚未訪問的鄰接頂點w調(diào)用DFS}voidDFSTraverseALGraphG{inti;printf"DFSTraverse:";fori=0;i<G.vexnum;i++visitedi=False;//訪問標(biāo)志數(shù)組初始化fori=0;i<G.vexnum;i++ifvisitediDFSG;i;//對尚未訪問的頂點調(diào)用DFS}//按廣度優(yōu)先非遞歸的遍歷圖G;使用輔助隊列Q和訪問標(biāo)志數(shù)組visitedvoidBFSTraverseALGraphG{inti;u;w;LinkQueueQ;printf"BFSTreverse:";fori=0;i<G.vexnum;i++visitedi=False;//訪問標(biāo)志數(shù)組初始化InitQueueQ;//初始化隊列fori=0;i<G.vexnum;i++ifvisitedi{visitedi=True;//訪問頂點iprintf"%d->";i;EnQueueQ;i;//將序號i入隊列whileQ.front==Q.rear//若隊列不空;繼續(xù){DeQueueQ;u;//將隊頭元素出隊列并置為uforw=FirstAdjVexG;u;w;w=NextAdjVexG;u;wifvisitedw//對u的尚未訪問的鄰接頂點w進(jìn)行訪問并入隊列{visitedw=True;printf"%d->";w;EnQueueQ;w;}}}}voidmain{ALGraphG;
intselect;printf"do{圖的有關(guān)操作實驗\n";printf"\n1創(chuàng)建printf"3.輸出該有向圖的度和入度printf"5.創(chuàng)建一個無向圖的鄰接表一個有向圖的鄰接表2輸出該鄰接表\n";4.輸出該有拓?fù)渑判蛐蛄衆(zhòng)n";6.深度優(yōu)先遞歸遍歷該無向圖\n";0.退出向圖printf"7.廣度優(yōu)先遍歷該無向圖printf"請輸入選擇:";scanf"%d";&select;switchselect{\n";case1:printf"\n創(chuàng)建一個有向圖的鄰接表:\n";creat_link&G;break;case2:printf"\n輸出該鄰接表:\n";visitG;break;case3:printf"\n輸出該有向圖的度和入度:\n";cacu&G;print_degreeG;break;case4:printf"\n輸出該有向圖拓?fù)渑判蛐蛄校篭n";ifTopologiSortGprintf"Toposortisnotsuccess";break;case5:printf"\n創(chuàng)建一個無向圖的鄰接表:\n";creat_link&G;break;case6:printf"\n深度優(yōu)先遞歸遍歷該無向圖:\n";DFSTraverseG;break;case7:printf"\n廣度優(yōu)先遍歷該無向圖:\n";BFSTraverseG;break;case0:break;default:printf"輸入選項錯誤重新輸入\n";}
}2.創(chuàng)建一個有向圖的領(lǐng)接表4.在有向圖的鄰接表的基礎(chǔ)上計算各頂點的度;并輸出..5.輸出它的拓?fù)渑判蛐蛄?.輸出所建無向圖的鄰接表7.
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 基建金融相關(guān)行業(yè)投資方案
- 跨學(xué)科教學(xué)與綜合性學(xué)習(xí)計劃
- 加強內(nèi)部審核的主管工作總結(jié)計劃
- 提升崗位技能培訓(xùn)的有效性計劃
- 班級園藝計劃
- 營銷培訓(xùn)課件-微信營銷具體實施方案
- 大學(xué)生團(tuán)日活動班會
- 2024-2025學(xué)年上學(xué)期七年級期末模擬試卷-考點大串講(2024冀教版)(解析版)-A4
- 急診醫(yī)學(xué)課件水、電解質(zhì)與酸堿平衡紊亂
- 《郵政消防安全培訓(xùn)》課件
- 2025年中考道德與法治一輪教材復(fù)習(xí)-九年級下冊-第一單元 我們共同的世界
- 【MOOC】中國電影經(jīng)典影片鑒賞-北京師范大學(xué) 中國大學(xué)慕課MOOC答案
- 陜西省西安市長安區(qū)2024-2025學(xué)年八年級上學(xué)期期中地理試卷
- 企業(yè)破產(chǎn)律師服務(wù)協(xié)議
- 【MOOC】遺傳學(xué)-中國農(nóng)業(yè)大學(xué) 中國大學(xué)慕課MOOC答案
- 預(yù)防火災(zāi)消防安全培訓(xùn)
- 2024年中國建設(shè)銀行個人人民幣貸款合同版B版
- 《古希臘羅馬建筑》課件
- 2023年涼山州德昌縣衛(wèi)生系統(tǒng)事業(yè)單位考核招聘考試真題
- 第十五講-新時代與中華民族共同體建設(shè)-中華民族共同體概論教案
- 腫瘤科介入治療及護(hù)理
評論
0/150
提交評論