版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)報(bào)告
目的要求1.掌握圖的存儲思想及其存儲實(shí)現(xiàn)..2.掌握圖的深度、廣度優(yōu)先遍歷算法思想及其程序?qū)崿F(xiàn)..3.掌握圖的常見應(yīng)用算法的思想及其程序?qū)崿F(xiàn)..實(shí)驗(yàn)內(nèi)容1.鍵盤輸入數(shù)據(jù);建立一個有向圖的鄰接表..2.輸出該鄰接表..3.在有向圖的鄰接表的基礎(chǔ)上計(jì)算各頂點(diǎn)的度;并輸出..4.以有向圖的5.采用鄰接表存儲實(shí)現(xiàn)6.采用鄰接表存儲實(shí)現(xiàn)7.在主函數(shù)中設(shè)計(jì)一個簡單的鄰接表為基礎(chǔ)實(shí)現(xiàn)輸出它的拓?fù)渑判蛐蛄?.無向圖的深度優(yōu)先遞歸遍歷..無向圖的廣度優(yōu)先遍歷..菜單;分別調(diào)試上述算法..源程序:主程序的頭文件:隊(duì)列#include<stdio.h>#include<stdlib.h>#defineTRUE1#defineFALSE0#defineOK1#defineERROR0#defineOVERFLOW-2typedefintQElemType;typedefstructQNode{//隊(duì)的操作QElemTypedata;structQNode*next;}QNode;*QueuePtr;typedefstruct{QueuePtrfront;QueuePtrrear;}LinkQueue;voidInitQueueLinkQueue&Q{//初始化隊(duì)列Q.front=Q.rear=QueuePtrmallocsizeofQNode;ifQ.frontexitOVERFLOW;//存儲分配失敗Q.front->next=NULL;}intEnQueueLinkQueue&Q;QElemTypee//插入元素e為Q的新的隊(duì)尾元素{QueuePtrp;p=QueuePtrmallocsizeofQNode;ifpexitOVERFLOW;p->data=e;
p->next=NULL;Q.rear->next=p;Q.rear=p;returnOK;}intDeQueueLinkQueue&Q;QElemType&e//刪除Q的隊(duì)頭元素;用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/*頂點(diǎn)最大個數(shù)#defineVertexTypechar/*頂點(diǎn)元素類型enumBOOlean{False;True};*/*/BOOleanvisitedMAX_VERTEX_NUM;//全局變量——訪問標(biāo)志數(shù)組typedefstructArcNode{intadjvex;structArcNode*nextarc;intweight;/*邊的權(quán)*/}ArcNode;/*表結(jié)點(diǎn)*/typedefstructVNode{intdegree;indegree;/*頂點(diǎn)的度;入度*/VertexTypedata;ArcNode*firstarc;}VNode/*頭結(jié)點(diǎn)*/;AdjListMAX_VERTEX_NUM;typedefstruct{AdjListvertices;intvexnum;arcnum;/*頂點(diǎn)的實(shí)際數(shù);邊的實(shí)際數(shù)*/}ALGraph;//建立圖的鄰接表voidcreat_linkALGraph*G{inti;j;ArcNode*s;
printf"請依次輸入頂點(diǎn)數(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"請輸入頂點(diǎn)的數(shù)組坐標(biāo)若退出;請輸入-1:";scanf"%d";&i;ifi==-1break;printf"請輸入頂點(diǎn)所指向下一個頂點(diǎn)的數(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";}}//計(jì)算各頂點(diǎ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個頂點(diǎn)的第一個鄰接頂點(diǎn)intFirstAdjVexALGraphG;intv{ifG.verticesv.firstarcreturn0;elsereturnG.verticesv.firstarc->adjvex;}//在圖G中尋找第v個頂點(diǎn)的相對于u的下一個鄰接頂點(diǎn)intNextAdjVexALGraphG;intv;intu{ArcNode*p;p=G.verticesv.firstarc;whilep->adjvex=up=p->nextarc;//在頂點(diǎn)v的弧鏈中找到頂點(diǎn)uifp->nextarc==NULLreturn0;//若已是最后一個頂點(diǎn);返回0
elsereturnp->nextarc->adjvex;//返回下一個鄰接頂點(diǎn)的序號}//采用鄰接表存儲實(shí)現(xiàn)無向圖的深度優(yōu)先遞歸遍歷voidDFSALGraphG;inti{intw;visitedi=True;//訪問第i個頂點(diǎn)printf"%d->";i;forw=FirstAdjVexG;i;w;w=NextAdjVexG;i;wifvisitedwDFSG;w;//對尚未訪問的鄰接頂點(diǎn)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ǎn)調(diào)用DFS}//按廣度優(yōu)先非遞歸的遍歷圖G;使用輔助隊(duì)列Q和訪問標(biāo)志數(shù)組visitedvoidBFSTraverseALGraphG{inti;u;w;LinkQueueQ;printf"BFSTreverse:";fori=0;i<G.vexnum;i++visitedi=False;//訪問標(biāo)志數(shù)組初始化InitQueueQ;//初始化隊(duì)列fori=0;i<G.vexnum;i++ifvisitedi{visitedi=True;//訪問頂點(diǎn)iprintf"%d->";i;EnQueueQ;i;//將序號i入隊(duì)列whileQ.front==Q.rear//若隊(duì)列不空;繼續(xù){DeQueueQ;u;//將隊(duì)頭元素出隊(duì)列并置為uforw=FirstAdjVexG;u;w;w=NextAdjVexG;u;wifvisitedw//對u的尚未訪問的鄰接頂點(diǎn)w進(jìn)行訪問并入隊(duì)列{visitedw=True;printf"%d->";w;EnQueueQ;w;}}}}voidmain{ALGraphG;
intselect;printf"do{圖的有關(guān)操作實(shí)驗(yà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"輸入選項(xiàng)錯誤重新輸入\n";}
}2.創(chuàng)建一個有向圖的領(lǐng)接表4.在有向圖的鄰接表的基礎(chǔ)上計(jì)算各頂點(diǎn)的度;并輸出..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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度主題餐飲店長創(chuàng)意管理聘用協(xié)議3篇
- 2024版新媒體內(nèi)容創(chuàng)作與分發(fā)合同
- 2025年度醫(yī)療器械代工與品牌推廣管理協(xié)議4篇
- 2025年度新型瓷磚研發(fā)生產(chǎn)合作協(xié)議范本4篇
- 2024版箱式變壓器的采購合同范本
- 2024版鋁合金辦公室隔斷門制作與安裝協(xié)議
- 中國片壯晶石項(xiàng)目投資可行性研究報(bào)告
- 2025年版?zhèn)€人房產(chǎn)出售交易資金監(jiān)管及風(fēng)險(xiǎn)控制合同2篇
- 2025年度個人房產(chǎn)買賣合同(含物業(yè)費(fèi))4篇
- 2025年度個人消費(fèi)貸款合同補(bǔ)充協(xié)議(綠色金融)4篇
- 品牌策劃與推廣-項(xiàng)目5-品牌推廣課件
- 信息學(xué)奧賽-計(jì)算機(jī)基礎(chǔ)知識(完整版)資料
- 發(fā)煙硫酸(CAS:8014-95-7)理化性質(zhì)及危險(xiǎn)特性表
- 數(shù)字信號處理(課件)
- 公路自然災(zāi)害防治對策課件
- 信息簡報(bào)通用模板
- 社會組織管理概論全套ppt課件(完整版)
- 火災(zāi)報(bào)警應(yīng)急處置程序流程圖
- 耳鳴中醫(yī)臨床路徑
- 安徽身份證號碼前6位
- 分子生物學(xué)在動物遺傳育種方面的應(yīng)用
評論
0/150
提交評論