數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)(C語(yǔ)言版)飛機(jī)訂票系統(tǒng)_第1頁(yè)
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)(C語(yǔ)言版)飛機(jī)訂票系統(tǒng)_第2頁(yè)
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)(C語(yǔ)言版)飛機(jī)訂票系統(tǒng)_第3頁(yè)
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)(C語(yǔ)言版)飛機(jī)訂票系統(tǒng)_第4頁(yè)
數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)(C語(yǔ)言版)飛機(jī)訂票系統(tǒng)_第5頁(yè)
已閱讀5頁(yè),還剩24頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告- #- -)生口C語(yǔ)言版數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告- #- #-數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告- - -課題:飛機(jī)訂票系統(tǒng)和圖的遍歷的動(dòng)態(tài)演示姓名:學(xué)號(hào):班級(jí):指導(dǎo)教師:訂票系統(tǒng)需求分析任務(wù):通過(guò)此系統(tǒng)可以實(shí)現(xiàn)如下功能:錄入:可以錄入航班情況(數(shù)據(jù)可以存儲(chǔ)在一個(gè)數(shù)據(jù)文件中,數(shù)據(jù)結(jié)構(gòu)、具體數(shù)據(jù)自定)查詢:可以查詢某個(gè)航線的情況(如,輸入航班號(hào),查詢起降時(shí)間,起飛抵達(dá)城市,航班票價(jià),票價(jià)折扣,確定航班是否滿倉(cāng));可以輸入起飛抵達(dá)城市,查詢飛機(jī)航班情況;訂票:(訂票情況可以存在一個(gè)數(shù)據(jù)文件中,結(jié)構(gòu)自己設(shè)定)可以訂票,如果該航班已經(jīng)無(wú)票,可以提供相關(guān)可選擇航班;退票:可退票,退票后修

2、改相關(guān)數(shù)據(jù)文件;客戶資料有姓名,證件號(hào),訂票數(shù)量及航班情況,訂單要有編號(hào)。修改航班信息:當(dāng)航班信息改變可以修改航班數(shù)據(jù)文件要求:根據(jù)以上功能說(shuō)明,設(shè)計(jì)航班信息,訂票信息的存儲(chǔ)結(jié)構(gòu),設(shè)計(jì)程序完成功能;2:主要設(shè)計(jì)思路:1)算法構(gòu)造流程圖:A:主菜單:主菜單0123456789輸列出按航按訂票退票修改保存讀取退出入航班班號(hào)城程序系統(tǒng)飛機(jī)文件文航的信查詢市航班件、班息航班來(lái)的信下載的信息查息文件信詢息航班B:各分塊模板的構(gòu)造流程圖:0.輸入航班的信息航班號(hào)起飛城市降落城市出發(fā)時(shí)間降落時(shí)間剩下的座位價(jià)格折扣1.列出航班的信息繼續(xù)y退出n2.按航班號(hào)查詢航班信息輸入所需要查詢的航班號(hào)顯示這個(gè)航班的的信息

3、3.按城市來(lái)查詢航班輸入起飛城市輸入降落城市顯示這個(gè)航班的信息4.訂票程序輸入號(hào)碼輸入名字輸入ID需要定的票航班號(hào)數(shù)5.退票系統(tǒng)輸入航班號(hào)輸入你ID確定退票1否定06.修改飛機(jī)航班的信息輸入要修改的航班號(hào)重新輸入新的航班信息7.保存文件顯示保存成功3:功能函數(shù)設(shè)計(jì):訂票系統(tǒng)主菜單函數(shù)menu_select()本函數(shù)主要構(gòu)造系統(tǒng)的主菜單,系統(tǒng)需要實(shí)現(xiàn)很多功能,并且各個(gè)功能需要各自的函數(shù)支持,所以通過(guò)主菜單可以輕松的進(jìn)入各個(gè)函數(shù)下實(shí)現(xiàn)各自的功能,故主菜單顯得尤為重要。其實(shí)就是通過(guò)鍵盤(pán)輸入選擇項(xiàng),然后通過(guò)scanf接受,在通過(guò)swtich判斷進(jìn)入各個(gè)選擇項(xiàng)。:工作人員管理函數(shù)enter()&chan

4、ge()系統(tǒng)需要各個(gè)航班的詳細(xì)信息,所以需要工作人員把信息輸入系統(tǒng)里,以供乘客查詢訂票。enter()函數(shù)的構(gòu)造就是為了解決這個(gè)問(wèn)題。而有可能航班線路更改或由于天氣等原因飛機(jī)的起飛時(shí)間發(fā)生了更改,故工作人員需要及時(shí)更改信息,所以需要構(gòu)造change()函數(shù)。:列出航班信息的函數(shù)list()乘客需要查詢各個(gè)航班的信息,所以通過(guò)系統(tǒng)要能調(diào)出上面工作人員已經(jīng)錄入好的航班信息,所以構(gòu)造本函數(shù)來(lái)實(shí)現(xiàn)這個(gè)功能。乘客具體查詢函數(shù)search()本函數(shù)分兩個(gè)分函數(shù):searchi()和search2(),它們分別實(shí)現(xiàn)乘客的按航班查詢和按出發(fā)及抵達(dá)城市的兩種查詢方案。票務(wù)管理函數(shù)book()&quit()通過(guò)b

5、ook()函數(shù)可以實(shí)現(xiàn)乘客的訂票操作,通過(guò)quit()可以實(shí)現(xiàn)乘客的退票操作。(6)文件操作函數(shù)save()&load()3源程序代碼:(WINTC下運(yùn)行)#include#include#include#include#defineN20#defineQ40/*定義數(shù)據(jù)結(jié)構(gòu)*/*乘客信息*/typedefstructcharnumber10;/*編號(hào)*/charid20;/*證件號(hào)*/charname10;/*姓名*/intcount;/*訂票數(shù)*/TOC o 1-5 h zcharflightname10;/*乘坐航班號(hào)*/GUEST;/*航班信息*/typedefstructcharpl

6、anenumber10;/*航班號(hào)*/charTake_off_city20;/*起飛城市*/charArrived_in_city20;/*抵達(dá)城市*/chartakeoff_time20;/*起飛時(shí)間*/charLanding_time20;/*降落時(shí)間*/intshipping;/*艙位數(shù)*/charprice5;/*票價(jià)*/chardiscount5;/*折扣*/GUESTguest20;intsit;FLY;/*菜單函數(shù),函數(shù)返回值為整數(shù),代表所選的菜單項(xiàng)*/menu_select()intc;- - -printf(按任意鍵返回主菜單n);/*提示壓任意鍵繼續(xù)*/getch();/

7、*讀入任意字符*/printf(Welcometonn);printf(TicketsBookingSystemnn);printf(*MENU*nn);printf(0.輸入航班信息n);printf(1.列出航班的信息n);printf(2.按航班號(hào)查詢航班信息n);printf(3.按城市來(lái)查詢航班n);printf(4.訂票程序n)printf(5.退票系統(tǒng)n)printf(6.修改飛機(jī)航班的信息n);printf(7.保存文件n)printf(8.讀取和下載文件n);printf(9.退出n);printf(*A*A*A*A*A*A*A*A*A*A*A*A*A*A*A*A*A*A*A

8、*A*A*A*A*A*A*A*A*A*A*A*A*A*A*A*A*A*A*A*A*A*A*1I1I11doprintf(n輸入你的選擇項(xiàng)(09):);/*提示輸入選項(xiàng)*/scanf(%d,&c);/*輸入選擇項(xiàng)*/while(c9);/*選擇項(xiàng)不在9之間重輸*/returnc;/*返回選擇項(xiàng),主程序根據(jù)該數(shù)調(diào)用相應(yīng)的函數(shù)*/*輸入函數(shù)*/intenter(FLYt)inti,k,n,m,w,j;char*s;TOC o 1-5 h zprintf(輸入航線總數(shù)(n=40):);/*輸入航線總數(shù)*/scanf(%d,&n);while(n40|n0)printf(輸入錯(cuò)誤!再次輸入(0n=40)

9、:);/*輸入航線總數(shù)*/scanf(%d,&n);printf(輸入航班的信息nn);/*提示信息*/printf(航班號(hào)起飛城市降落城市出發(fā)時(shí)間降落時(shí)間剩下的座位價(jià)格折扣n);printf(n);for(i=0;in;i+)scanf(%s,ti.planenumber);/*輸入姓名*/scanf(%s,ti.Take_off_city);/*輸入起飛城市*/scanf(%s,ti.Arrived_in_city);/*輸入降落城市*/scanf(%s,ti.takeoff_time);/*輸入起飛時(shí)間*/scanf(%s,ti.Landing_time);/*輸入降落時(shí)間*/scanf

10、(%d,&ti.shipping);/*輸入艙位數(shù)*/scanf(%s,ti.price);/*輸入票價(jià)*/scanf(%s,ti.discount);/*輸入折扣*/printf(n);for(i=0;in;i+)tireturnn;/*返回記錄條數(shù)sit=0;*/*顯示記錄,參數(shù)為記錄數(shù)組和記錄條數(shù)voidlist(FLYt,intinti;printf(航班號(hào)起飛城市n)*/降落城市出發(fā)時(shí)間降落時(shí)間剩下的座位價(jià)格折扣n)n);printf(for(i=0;in-1)/*如果整數(shù)i值大于n-1,說(shuō)明沒(méi)找到printf(沒(méi)有找到elseprintf(航班號(hào)起飛城市n);降落城市出發(fā)時(shí)間bre

11、ak;/*相等,則返回該記錄的下標(biāo)號(hào),程序提前結(jié)結(jié)束*/*/*/*/*記錄中的航班名和待比較的是否相等降落時(shí)間剩下的座位價(jià)格折扣n);/*顯示記錄*/printf(n);printf(%-12s%-12s%-10s%-12s%-10s%-7d%-7s%-7sn,ti.planenumber,ti.Take_off_city,ti.Arrived_in_city,ti.takeoff_time,ti.Landing_time,ti.shipping,ti.price,ti.discount);/*按起降城市查找記錄*/voidsearch2(FLYt,intn)chars120;chars220

12、;inti;TOC o 1-5 h zprintf(輸入起飛城市名稱:);scanf(%s,s1);/*輸入起飛城市名*/printf(輸入降落城市名稱:);scanf(%s,s2);/*輸入降落城市名*/for(i=O;in;i+)/*從第一條記錄開(kāi)始,直到最后一條*/if(strcmp(s1,ti.Take_off_city)=0)&(strcmp(s2,ti.Arrived_in_city)=0)/*記錄中的城市和待比較的是否相等*/*/break;/*相等,則返回該記錄的下標(biāo)號(hào),程序提前結(jié)結(jié)束n-1,說(shuō)明沒(méi)找到*/if(in-1)/*如果整數(shù)i值大于printf(沒(méi)有找到n);else

13、printf(航班號(hào)起飛城市降落城市出發(fā)時(shí)間降落時(shí)間剩下的座位價(jià)格折扣n);/*找到,顯示記錄*/printf(n);printf(%-12s%-12s%-10s%-12s%-10s%-7d%-7s%-7sn,ti.planenumber,ti.Take_off_city,ti.Arrived_in_city,ti.takeoff_time,ti.Landing_time,ti.shipping,ti.price,ti.discount);/*訂票*/voidbook(FLYt,intn)chars20,number110,name110,id120,flightname110;scanf(%

14、s,s2);/*輸入待查找證件號(hào)*/- - -inti,j=0,m,k,count1;TOC o 1-5 h zprintf(輸入你想預(yù)訂的票數(shù):);scanf(%d,&m);printf(號(hào)碼姓名證件號(hào)訂的票數(shù)航班號(hào)n);/*提示信息*/printf(n);for(k=0;km;k+)scanf(%s,number1);scanf(%s,namel);/*輸入訂票客戶姓名*/scanf(%s,idl);/*輸入證件號(hào)*/scanf(%d,&countl);/*輸入訂票票數(shù)*/scanf(%s,flightnamel);/*輸入航班號(hào)*/for(i=0;in-1)/*如果整數(shù)i值大于n-1,說(shuō)

15、明沒(méi)找到*/printf(對(duì)不起!沒(méi)有此航班n);m=m+2;k+;/*退票*/voidquit(FLYt,intn)TOC o 1-5 h zchars120,s220;/*保存待查找航班名和證件號(hào)字符串*/inti,k,j,h,l,ch;printf(請(qǐng)輸入你想退訂的航班號(hào):);scanf(%s,s1);/*輸入待查找航班名*/printf(請(qǐng)輸入你的證件號(hào):);printf(號(hào)碼姓名證件號(hào)訂的票數(shù)航班號(hào)n);/*顯示提示*/printf(n);for(i=O;in;i+)/*從第一條記錄開(kāi)始,直到最后一條*/for(j=0;jn-1)/*如果整數(shù)i值大于n-1,說(shuō)明沒(méi)找到*/printf

16、(沒(méi)有找到n);elseprintf(你是否確認(rèn)刪除(1/0)n);/*確認(rèn)是否要?jiǎng)h除*/scanf(%d,&ch);/*輸入一個(gè)整數(shù)或*/if(ch=1)/*如果確認(rèn)刪除整數(shù)為*/for(k=l+1;kn-1)/*如果整數(shù)i值大于n-1,說(shuō)明沒(méi)找到*/printf(沒(méi)有找到n);elseprintf(航班號(hào)起飛城市降落城市出發(fā)時(shí)間降落時(shí)間剩下的座位價(jià)格折扣n);/*找到,顯TOC o 1-5 h z示原先記錄*/printf(n);printf(%-12s%-12s%-10s%-12s%-10s%-7d%-7s%-7sn,ti.planenumber,ti.Take_off_city,ti.

17、Arrived_in_city,ti.takeoff_time,ti.Landing_time,ti.shipping,ti.price,ti.discount);printf(pleaseinputthenewinformation:n);scanf(%s,ti.planenumber);/*輸入航班名*/scanf(%s,ti.Take_off_city);/*輸入起始城市*/scanf(%s,ti.Arrived_in_city);/*輸入終點(diǎn)城市*/scanf(%s,ti.takeoff_time);/*輸入起飛時(shí)間*/scanf(%s,ti.Landing_time);/*輸入降落時(shí)

18、間*/scanf(%d,ti.shipping);/*輸入座位號(hào)*/scanf(%s,ti.price);/*輸入票價(jià)*/scanf(%s,ti.discount);/*輸入折扣*/*保存資料*/voidsave(FLYt,intn)inti,j;TOC o 1-5 h zFILE*fp;/*指向文件的指針*/if(fp=fopen(record1.txt,wb)=NULL)/*打開(kāi)文件,并判斷打開(kāi)是否正常*/printf(cannotopenfilen);/*沒(méi)打開(kāi)*/exit(1);/*退出*/printf(n保存文件n);/*輸出提示信息*/fprintf(fp,%d,n);/*將記錄數(shù)

19、寫(xiě)入文件*/fprintf(fp,rn);/*將換行符號(hào)寫(xiě)入文件*/for(i=0;in;i+)數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告- - -fprintf(fp,%s%s%s%s%s%d%s%s,ti.planenumber,ti.Take_off_city,ti.Arrived_in_city,ti.takeoff_time,ti.Landing_time,ti.shipping,ti.price,ti.discount);TOC o 1-5 h zfprintf(fp,rn);/*將換行符號(hào)寫(xiě)入文件*/fprintf(fp,%d,ti.sit);/*將記錄數(shù)寫(xiě)入文件*/fpr

20、intf(fp,rn);/*將換行符號(hào)寫(xiě)入文件*/for(j=0;jti.sit;j+)fprintf(fp,%s%s%s%d%s,ti.guestj.number,,ti.guestj.id,ti.guestj.count,ti.guestj.flightname)/*格式寫(xiě)入記錄*/fprintf(fp,rn);/*將換行符號(hào)寫(xiě)入文件*/fclose(fp);/*關(guān)閉文件*/*n);/*顯示保存成功*/printf(*恭喜!保存成功/*讀入函數(shù),參數(shù)為結(jié)構(gòu)體數(shù)組*/intload(FLYt)inti,n,j;FILE*fp;/*指向文件的指針*/if(fp=fo

21、pen(recordl.txt,rb)=NULL)/*打開(kāi)文件*/printf(不能打開(kāi)n);/*不能打開(kāi)*/exit(1);/*退出*/fscanf(fp,%d,&n);/*讀入記錄數(shù)*/for(i=0;in;i+)fscanf(fp,%s%s%s%s%s%d%s%s,ti.planenumber,ti.Take_off_city,ti.Arrived_in_city,ti.takeoff_time,ti.Landing_time,&ti.shipping,ti.price,ti.discount);fscanf(fp,%d,&ti.sit);/*讀入記錄數(shù)*/for(j=0;j4Weleo

22、neto信航*&8輸入你的選擇項(xiàng)個(gè)洱:TicketsBookingSystem:KM:MX:KM:XKJWXXJ耳島XKXMxHENU吃:KICKXJXKXK:叭*C:DocuBentsandSettingsAd*inistratorM面D巳bugYboQkl:idkEt.eze*、班班自息信詢?cè)冑坏牟椴榘嗍娜f(wàn)責(zé)統(tǒng)型下,竺口程系飛文和人出航城亜盔示詼存齧翦按按訂退謬探瀆退數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告- - #-0.輸入航班的信息輸入航班的信航班號(hào)起飛城市降落城市出發(fā)時(shí)間降落時(shí)間剩下的座位價(jià)格折扣上痙合摩10:0010:405008060.8南京北京8:509:5050013

23、000.75胺任意鍵返回主菜單1.列出航班的信息出發(fā)吋間降落時(shí)間剩下的座位價(jià)略折扣上悔合擔(dān)10:砸10:40500南豆北京8:509:50500mm耳耳耳耳MKMXMKMEndWMJ0J0J0:3輸入起飛城冇名鴦:上海箍人陰蓉城冇名杯合肥骯班尋據(jù)飛城市降落裁市出發(fā)吋間降落時(shí)間剩下的座位價(jià)格折扣123二海合肥1Q:0010:405008Q00.8按任意鍵返回蘭菜單訂票程序數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告- - #-B1關(guān)宏新3424231989081221912124陵任意鑲返回主菜單/A黯灌陽(yáng)小帶碼址名證件號(hào)訂的賽數(shù)航班號(hào)退票系統(tǒng)輸入你的選拝項(xiàng)0:5情揃人你想退訂的航班號(hào):晴輸

24、入擁旳證件號(hào)碼姓名證件號(hào)訂的票數(shù)航班號(hào)01關(guān)宏新3424231989881221912124帳是否確認(rèn)0底票成功辛?陵任意犍返回主菜單修改飛機(jī)航班的信息f號(hào)起飛城市降落誠(chéng)市出發(fā)時(shí)間降落時(shí)閏剩下的座位價(jià)格折扣123上悔合肥10:3010:40S008030.8pleaseinputtheneuinfomation:二悔合肥9;4010:0E45B7500.9保存文件輸入你的選擇保存文任H*恭畧I保存成功*興義任盍鍵返回主菜單讀取文件、下載文件數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)實(shí)驗(yàn)報(bào)告- - - #-圖的遍歷過(guò)程演示一需求分析:設(shè)計(jì)程序完成如下功能:對(duì)

25、給定的圖的結(jié)構(gòu)和起點(diǎn),產(chǎn)生深度優(yōu)先遍歷和廣度優(yōu)先遍歷,并列出求解的過(guò)程動(dòng)態(tài)演示。二主要設(shè)計(jì)思路:設(shè)計(jì)思想:簡(jiǎn)而言之,深度優(yōu)先,就是先遍歷它的一個(gè)鄰接點(diǎn),這個(gè)鄰接點(diǎn)的鄰接點(diǎn)然后才遍歷其他的鄰接點(diǎn)。廣度優(yōu)先,就是先把它所有的鄰接點(diǎn)都遍歷完以后,再遍歷它每個(gè)鄰接點(diǎn)的鄰接點(diǎn)。存儲(chǔ)結(jié)構(gòu)為圖的鄰接多重表,它是無(wú)向圖的一種鏈?zhǔn)酱鎯?chǔ)結(jié)構(gòu)。深度優(yōu)先遍歷:設(shè)是當(dāng)前被訪問(wèn)頂點(diǎn),在對(duì)做過(guò)訪問(wèn)標(biāo)記后,選擇一條從出發(fā)的未檢測(cè)過(guò)的邊,)若發(fā)現(xiàn)頂點(diǎn)已訪問(wèn)過(guò),則重新選擇另一條從出發(fā)的未檢測(cè)過(guò)的邊,否則沿邊,到達(dá)未曾訪問(wèn)過(guò)的,對(duì)訪問(wèn)并將其標(biāo)記為已訪問(wèn)過(guò);然后從開(kāi)始搜索,直到搜索完從出發(fā)的所有路徑,即訪問(wèn)完所有從出發(fā)可達(dá)的頂點(diǎn)之后

26、,才回溯到頂點(diǎn),并且再選擇一條從,出發(fā)的未檢測(cè)過(guò)的邊。上述過(guò)程直至從,出發(fā)的所有邊都已檢測(cè)過(guò)為止。此時(shí),若,不是源點(diǎn),則回溯到在,之前被訪問(wèn)過(guò)的頂點(diǎn);否則圖中所有和源點(diǎn)有路徑相通的頂點(diǎn)即從源點(diǎn)可達(dá)的所有頂點(diǎn)都已被訪問(wèn)過(guò),若圖是連通圖,則遍歷過(guò)程結(jié)束,否則繼續(xù)選擇一個(gè)尚未被訪問(wèn)的頂點(diǎn)作為新源點(diǎn),進(jìn)行新的搜索過(guò)程。廣度優(yōu)先遍歷:設(shè)和是兩個(gè)相繼要被訪問(wèn)的未訪問(wèn)過(guò)的頂點(diǎn)。它們的鄰接點(diǎn)分別記為,和,t為確保先訪問(wèn)的頂點(diǎn)其鄰接點(diǎn)亦先被訪問(wèn),在搜索過(guò)程中使用隊(duì)列來(lái)保存已訪問(wèn)過(guò)的頂點(diǎn)。當(dāng)訪問(wèn)和時(shí),這兩個(gè)頂點(diǎn)相繼入隊(duì)。此后,當(dāng)和相繼出隊(duì)時(shí),我們分別從和出發(fā)搜索其鄰接點(diǎn),,和,對(duì)其中未訪者進(jìn)行訪問(wèn)并將其入隊(duì)。這種

27、方法是將每個(gè)已訪問(wèn)的頂點(diǎn)入隊(duì),故保證了每個(gè)頂點(diǎn)至多只有一次入隊(duì)。A.圖的算法構(gòu)造思想:初始條件是圖的頂點(diǎn)集是圖中弧的集合操作結(jié)果按和是定義構(gòu)造圖初始條件圖存在操作結(jié)果銷(xiāo)毀圖初始條件圖存在和中頂點(diǎn)有相同的特征操作結(jié)果若圖中存在頂點(diǎn)則返回該頂點(diǎn)在圖中的位置否則返回其他信息初始條件圖存在是中頂點(diǎn)操作結(jié)果返回的值初始條件圖存在是中頂點(diǎn)操作結(jié)果返回的第一個(gè)鄰接頂點(diǎn)若頂在圖中沒(méi)有鄰接頂點(diǎn)則返回為空初始條件圖存在是中頂點(diǎn)是的鄰接頂點(diǎn)操作結(jié)果返回的下一個(gè)鄰接頂點(diǎn)若是的最后一個(gè)鄰接頂點(diǎn)則返回空初始條件圖存在是中頂點(diǎn)操作結(jié)果刪除頂點(diǎn)已經(jīng)其相關(guān)的弧初始條件圖存在的頂點(diǎn)的應(yīng)用函數(shù)操作結(jié)果對(duì)圖進(jìn)行深度優(yōu)先遍歷在遍歷過(guò)程

28、中對(duì)每個(gè)結(jié)點(diǎn)調(diào)用函數(shù)一次一旦失敗則操作失敗初始條件圖存在的頂點(diǎn)的應(yīng)用函數(shù)操作結(jié)果對(duì)圖進(jìn)行廣度優(yōu)先遍歷在遍歷過(guò)程中對(duì)每個(gè)結(jié)點(diǎn)調(diào)用函數(shù)一次一旦失敗則操作失敗附圖的結(jié)構(gòu)體構(gòu)造:數(shù)據(jù)對(duì)象是具有相同特性的數(shù)據(jù)元素的集合稱為點(diǎn)集數(shù)據(jù)關(guān)系屬于表示和之間存在的路徑B隊(duì)列的算法構(gòu)造:操作結(jié)果構(gòu)造一個(gè)空隊(duì)列初始條件:隊(duì)列已存在。操作結(jié)果:隊(duì)列被銷(xiāo)毀,不再存在。初始條件隊(duì)列已經(jīng)存在操作結(jié)果插入元素為的新的隊(duì)尾元素初始條件為非空隊(duì)列操作結(jié)果刪除的隊(duì)尾元素并用返回其值初始條件:隊(duì)列已經(jīng)存在操作結(jié)果若隊(duì)列為空則返回否則返回C本程序包含的模板:程.序模塊取得頂點(diǎn)數(shù)和弧數(shù);生成鄰接表結(jié)構(gòu)的圖;深度遍歷圖;廣度遍歷圖;2造鄰接

29、表結(jié)構(gòu)的圖;3度優(yōu)先遍歷圖;4度優(yōu)先遍歷圖;5列的基本操作模塊;6數(shù)聲明模塊;三源程序代碼:(VC+60下運(yùn)行)#include#include#include#defineMAX_VERTEX_NUM50/圖的最大頂點(diǎn)數(shù)#defineMAXQSIZE200/隊(duì)列的最大容量enumBOOLFalse,True;/定義枚舉變量typedefstructArcNode/圖的鄰接表存儲(chǔ)intadjvex;/該弧所指向的頂點(diǎn)的位置structArcNode*nextarc;/指向下一條弧的指針ArcNode;/弧結(jié)點(diǎn)typedefstructArcNode*AdjListMAX_VERTEX_NUM;

30、/指向第一條依附該頂點(diǎn)的弧的指針intvexnum,arcnum;/圖的當(dāng)前頂點(diǎn)和弧數(shù)Graph;typedefstruct/隊(duì)列結(jié)構(gòu)intelemMAXQSIZE;/數(shù)據(jù)域- - - -intfront;/隊(duì)頭指針intrear;/隊(duì)尾指針SqQueue;BOOLvisitedMAX_VERTEX_NUM;/全局變量訪問(wèn)標(biāo)志數(shù)組voidCreateGraph(Graph&);/生成圖的鄰接表voidDFSTraverse(Graph);/深度優(yōu)先搜索遍歷圖voidDFS(Graph,int);voidBFSTraverse(Graph);/廣度優(yōu)先搜索遍歷圖voidInitial(SqQue

31、ue&);/初始化一個(gè)隊(duì)列BOOLQueueEmpty(SqQueue);/判斷隊(duì)列是否空BOOLEnQueue(SqQueue&,int);/將一個(gè)元素入隊(duì)列BOOLDeQueue(SqQueue&,int&);/將一個(gè)元素出隊(duì)列intFirstAdjVex(Graph,int);/求圖中某一頂點(diǎn)的第一個(gè)鄰接頂點(diǎn)intNextAdjVex(Graph,int,int);/求某一頂點(diǎn)的下一個(gè)鄰接頂點(diǎn)intmain()GraphG;/采用鄰接表結(jié)構(gòu)的圖charj=y;printf(題目:編制一個(gè)“圖遍歷的演示”的程序.n);/程序解說(shuō)printf(n本程序?qū)⒀菔旧梢粋€(gè)圖,并對(duì)它進(jìn)行遍歷.n);

32、printf(輸入圖的頂點(diǎn)數(shù)和弧數(shù):n格式:頂點(diǎn)數(shù),弧數(shù);例如:5,4n);2,4n);printf(接著輸入各邊(弧尾,弧頭):n例如:5,3n3,1n1,2nprintf(程序會(huì)生成一個(gè)圖,并對(duì)它進(jìn)行深度和廣度遍歷.n);printf(深度遍歷:l-2-4-3-5n廣度遍歷:1-2-3-4-5n);/while(j!=N&j!=n)printf(n請(qǐng)輸入頂點(diǎn)數(shù)和弧數(shù):);scanf(%d,%d,&G.vexnum,&G.arcnum);/輸入圖的頂點(diǎn)數(shù)和弧數(shù)CreateGraph(G);/生成鄰接表結(jié)構(gòu)的圖DFSTraverse(G);/深度優(yōu)先搜索遍歷圖BFSTraverse(G);/廣

33、度優(yōu)先搜索遍歷圖printf(圖遍歷完畢,繼續(xù)進(jìn)行嗎?(Y/N);scanf(%c,&j);voidCreateGraph(Graph&G)/構(gòu)造鄰接表結(jié)構(gòu)的圖Ginti;intstart,end;ArcNode*s;for(i=1;i=G.vexnum;i+)G.AdjListi=NULL;/初始化指針數(shù)組for(i=1;inextarc=G.AdjListstart;/插入到鄰接表中s-adjvex=end;G.AdjListstart=s;s=(ArcNode*)malloc(sizeof(ArcNode);s-nextarc=G.AdjListend;s-adjvex=start;G.

34、AdjListend=s;voidDFSTraverse(GraphG)TOC o 1-5 h z/深度優(yōu)先遍歷圖Ginti;printf(深度優(yōu)先遍歷:);for(i=1;i=G.vexnum;i+)visitedi=False;/訪問(wèn)標(biāo)志數(shù)組初始化for(i=1;i,i);for(w=FirstAdjVex(G,i);w0;w=NextAdjVex(G,i,w)if(!visitedw)DFS(G,w);/對(duì)尚未訪問(wèn)的鄰接頂點(diǎn)w調(diào)用DFSvisitedvoidBFSTraverse(GraphG)/按廣度優(yōu)先非遞歸的遍歷圖G,使用輔助隊(duì)列Q和訪問(wèn)標(biāo)志數(shù)組inti,u,w;SqQueueQ;printf(廣度優(yōu)先遍歷:);for

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論