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

下載本文檔

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

文檔簡介

1、C語言版課題:飛機訂票系統(tǒng)和圖的遍歷的動態(tài)演示姓名:學(xué)號:班級: 指導(dǎo)教師:ij票系統(tǒng)1.需求分析任務(wù):通過此系統(tǒng)可以實現(xiàn)如下功能:錄入:可以錄入航班情況(數(shù)據(jù)可以存儲在一個數(shù)據(jù)文件中,數(shù)據(jù)結(jié)構(gòu)、具體數(shù)據(jù)自定)查詢:可以查詢某個航線的情況(如,輸入航班號,查詢起降時間,起飛抵達(dá)城市,航班票價,票價折扣,確定航班是否滿倉);可以輸入起飛抵達(dá)城市,查詢飛機航班情況;訂票:(訂票情況可以存在一個數(shù)據(jù)文件中,結(jié)構(gòu)自己設(shè)定)可以訂票,如果該航班己經(jīng)無票,可以提供相關(guān)可選擇航班;退票:可退票,退票后修改相關(guān)數(shù)據(jù)文件;客戶資料有姓名,證件號,訂票數(shù)量及航班情況,訂單要有編號。修改航班信息:當(dāng)航班信息改變可以

2、修改航班數(shù)據(jù)文件要求:根據(jù)以上功能說明,設(shè)計航班信息,訂票信息的存儲結(jié)構(gòu),設(shè)計程序完成功能;2:主要設(shè)計思路: 1) 算法構(gòu)造流程圖:A:主菜單:主菜單0123456789輸列出按航按訂票退票修改保存讀取退出入航班班號城程序系統(tǒng)飛機文件文航的信查詢市航班件、班息航班來的信下載的信息查息文件信詢息航班B:各分塊模板的構(gòu)造流程圖:0 ,輸入航班的信息航班起飛城降落城出發(fā)時降落時剩下的座價折號市市問間位格扣1 .列出航班的信息繼續(xù)y退出n2.按航班號查詢航班信息輸入所需耍查詢的航班號輸入號碼輸入名字輸入ID需要定的票數(shù)航班號5 .退票系統(tǒng)顯示這個航班的的信息3 .按城市來查詢航班輸入起飛城市輸入降落

3、城市顯示這個航班的信息4 .訂票程序5 退票系統(tǒng)輸入航班號輸入你ID確定退票1否定。6 .修改飛機航班的信息輸入要修改的航班號重新輸入新的航班信息7 保存文件顯示保存成功3:功能函數(shù)設(shè)計:(1):訂票系統(tǒng)主菜單函數(shù)menu-SeleCto本函數(shù)主要構(gòu)造系統(tǒng)的主菜單,系統(tǒng)需要實現(xiàn)很多功能,并且各個功 能需要各自的函數(shù)支持,所以通過主菜單可以輕松的進入各個函數(shù)下實現(xiàn)各自 的功能,故主菜單顯得尤為重要。其實就是通過鍵盤輸入選擇項,然后通過 SCanf接受在通過SWtiCh判斷進入各個選擇項。(2):工作人員管理函數(shù)enterO&change 0系統(tǒng)需要各個航班的詳細(xì)信息,所以需要工作人員把信

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

5、操作,通過quit ()可以實現(xiàn)乘客的退票操作。(6)文件操作函數(shù)SaVe 0 Aload ()3.源程序代碼:(WIN TC下運行)HincludeOSincludeSincludeAincludeJMefine N 20口 define Q 40八定義數(shù)據(jù)結(jié)構(gòu)材/*乘客信息*/typedef StrUCt(Char number 10 ;/*編號*/Char id20;證件號Char name 10; *姓 Zint count;*訂栗數(shù)*Char flightname 10 ;/*乘電航朝二:*GUEST;/*航班信息*/typedef StrUCtchar PlanenUmber 10

6、 ;/*®l i 班號*/Char TakeeOffeCity 20;起飛城市Char ArriVedein.city20 ;/*抵達(dá)城市*/Char takeoftt ime 20 ;/*fe間*Char Landing_time20 ;/*降落時間*int ShiPPlng;* 艙位數(shù)Char PriCer5 ;*票價*Char discount 5;*折j X'GUEST guest20;int sit;FLY;”菜*1函數(shù).函數(shù)返回值為整數(shù).代表所選的菜單項*/menu SeleCt 0int c;Printf(人按任總惟返回主); 示壓任總鍵繼續(xù)getchf); /

7、*讀入任總字PrintffPrintffPrintffPrintffPrintffPrintf(PrintffPrintffPrintffPrintffPrintffPrintffPrintffPrintf( do(Printf (AnWelCOme tonnTickets BOOklng SyStemnn");* 桂* *M EXU * *nn”)0.輸入航班信息'1 .列出航班的信息');2 -按航班號查詢航班信息、的;3 按城市來查詢航班、);4 .訂票程序的;5 .退票系統(tǒng)力);6 修改S機航班的信息):7 保存文件、十);8.9.讀取和下載文件力); 退出&

8、quot;);輸入你的選擇項(0為):J提示輸入選項幻SCanf ("d: &c); *輸入選擇項*/while(c<0|c>9 ;/*選擇項不在、9之間中:輸7 returnc;/*返回選擇項.主程If根據(jù)該數(shù)調(diào)用相應(yīng)的岡FG”輸入函數(shù)*/int enter(FLY t|)(int L k, n, m, w, j;Char *s;Printf輸入航線總數(shù)(n<二10): J輸入航線總數(shù)*/SCanf(W&");WhIIe(n>40 n<0(Prints輸入錯誤!再次輸入(0nv=40)<);/*輸入航線總數(shù)柑SCanfC

9、%d", &n);)PdntfC輸入航班的信息加即);/*提示信息燈PdntfC航班號起飛城市降落城市出發(fā)時間降落時間剩下的座位價格折扣iT);十);Printfrfor(i=0;i<n;i+)SCanfe%s't i. PlanenUmber) ;/*輸入姓名* SCanfe%s", ti. Take.Off.City) ;/*輸入起匕城市 JK SCanf(WSn ti. ArriVedeineCity) ;/*輸入降落城市*/SCanfc%s; ti. takeoff-time) ; /*輸入起 E 時間*SCanf ("%s"

10、;, ti. Landing-time) ;/*輸入降落時間WSCanfC'%oF, %ti. ShiPPing);輸入艙位數(shù)*SCanfc%s*> ti. PriCe) ;/*輸入票價7SCanffWs: ti. discount) ;*輸入折 J 1 )Printf(*的;for(i=0;i<n;i+)ti. sit=0; return n; /*返回記錄條數(shù)*/)/*顯示記錄,參數(shù)為記錄數(shù)組和記錄條數(shù)VOld liSt (FLY t f int n) (int i;Prlntfa航班號起S城市降落城市出發(fā)時間降落時間剩下的座位價格折扣J);T);Printf(nfor

11、(i=0;i<n;i+) printfC,*AL2s%-12sfi-10s%rl2sE-10s%-7d-7s-7sn,ti. planenumber, ti. Take.OffCity, ti. Ar rived.in-cixy, ti takeoff.time, ti Landing time, ti shipping, ti price, ti- discount); e按肌班號查找記錄樹PrintfC* *end* *京*Void SearChlfFLY tint n)(Chars20;/*保存待查找航班名字符串*/int i;Printfr輸入你想查找的航班名Q ;SCanfr%

12、ss); /*輸入待查找航班名柑for(i=0;i<n;i+) /*從第-條記錄開始直到最后條*/(if (strcmp(si t i. PlanenUmber) =0/*i己錄中的航班"和待比較的是否相等break;*相等則返何該記錄的F標(biāo)程序提前結(jié)結(jié)束*)if(i>n-l) /*如果整數(shù)i值大于曠1,說明沒找到*/ Print”*沒有找到、的;elsePrintf ("航班號起飛城市降落城市出發(fā)時間降落時間剩下的座位價格折扣)小記錄rD;PrintfC* -Prlntf ( - %-12s%-12s%-10s%n12s%-10s%-7d%-7s%-7snAt

13、i.planenumber,ti.Take.OffCity,ti. Ar rived. in-Cityi ti takeoff.time, ti Landing-time, tLi ShIPPing, ti price, ti- discount);) )“按起降城市查找記錄*/Void SearCh2(FLYt,irrt n)(Char si 20;Char s220;int i;Prlntf輸入起飛城市名稱廣);SCanf(WSSsl);/*輸入起"成市名*/Prlntf(*輸入降落城市名稱廣);SCanfr%ss2); /*輸入降落城下名for(i=0;ivn;i+)/*從第-

14、條記錄開妗H到報后一條*/(if (StrCmP (si, t ij - Take-OffCity) =0)&& (StrCmP (s2, t i. ArriVed_in_city) =0)*記錄“的城市和待比較的是否相等*/break;/*相等,則返回該記錄的下標(biāo)號,程廳提前""束*/if(i>n-l) /*如果整數(shù)i值大于曠L說明沒找到*/Printf(*沒有找到力;elsePrintf("航班號起飛城市降落城市出發(fā)時間降落時間剩下的座位價格折扣、 b"找到弟小記錄*/Printff*r);Prlntf ("%-12s

15、%-12s%-10s%-12s%-10s%A7d%"7s%-A7sn; t i. planenumber, ti. Take-Off-City, t i. Ar rived-in cixy, ti takeoff-time, ti Landing-time, ti shipping, ti price, ti- discount);)“訂票*/VOld book (FLY tJnt n)Char s20 i number 1 10, namel10, idl20j, flightnamelllO;int i, j=0A nii k, COUntl:Printf ("輸入你想

16、預(yù)訂的票數(shù)廠):SCanf(*%d", &m);Printf(八號碼姓名Printff"證件號訂的票數(shù)航班號的;”提示信息十); for(k=0jk<mjk4-+)(SCanf (*%szz, numb er 1);SCanfrs", namel) ;/*輸入訂票客戶姓名*/SCanfr%s; idl) ;/*輸入證件號*/SCanffW&countl) ;/*輸入訂票票數(shù)材SCanfflightnamel) ;/*喻入骯班號*for (i=0; i<mi) *從第條記錄開始,直劊辰后,條* (If(StrCmP(flightnameI

17、F ti, PlanenUnlber) =0*記錄:口的荻班名和待比較的是否相等豹( j=ti. sit;StrCPy (t i , guest j number, number 1);StrCPy ti guest j name, namel);StrCPy(ti guest j id,idl);ti guestj COUnt=COUntl:StrCPyti guestj flightname, flightnamel);ti ShlPPing=ti ShiPPIng-COUntl;ti - Sit 十十;break;/'*相等,則返回該記錄的卜標(biāo)耳,程序提前結(jié)結(jié)束*/) if(i&

18、gt;n-。如果整數(shù)i值大尸曠說明沒找到穿/ (Printfc對不起!沒有此航班n");m 二 m:2; k+; ) )退票*/VOld quit (FLY tilnt n) (Char si20,s220;“保存待查找航班件號字符串*/int i, k, j, hf 1, ch;Primfr請輸入你想退訂的航班:"): SCanffWSS SI); /*輸入待查找航班名*/ Printf(人清輸入你的證件號廣');SCaIlf(* s2); /*輸入待杳找證件號*/PHntf(T碼 姓名 證件號訂的票數(shù)航班號力;/*品小提小*/Printf("J);fo

19、r(i=0;ivn;i+). *從第-條記錄開始P '到最后條*J (for。=OJ<ti.sitij+4-)if (strcmp(sl, ti. guest j. flightname) =0&&(StrCmP(s2, t i. guestj. id) =0) j (Prlntf ("%-Alls%-16s%16s%-14d%10sn*, ti- guest j number, t i guest (j name, ti-guest j i di t i guest j CoUnti t d guestj flightname);ti ShiPPing

20、=ti ShiPPlngti guestj COUnt;l=j;h=i; break; ) ) i=h;if(i>n-l)L如果整數(shù)i值大于n-lj說明沒找到檸 PrintfC沒有找到的;else(Printfa你是否確認(rèn)刪除(1/0) 的;確認(rèn)是否婆刪除劉SCanf C'%oF, &ch); 輸入個整數(shù)或*if(ch=二確認(rèn)刪除整數(shù)為燈 (for(k=l-rlA<ti. sitjk) (StrCPy(tij. guestk-l. number, ti. guestk. number) /將后一條記錄的姓名拷貝到前.條*/StrCPy(tij guestkPl na

21、me, ti-guestk name);StrCPyti guestkl id, t i guestfk: Id);ti- guestkAll - COUnt=tIi guestk: COUnt;StrCPy(ti guestk"l flightname, tli guestk2 - flightname); )ti sit;)Printf ("退票成功!W);/*提示退票成功*/)/*修改航班信息*/VOld Channge(FLYtl,inx n)Chars20;/: *要刪除記錄的姓名*/int Z9 j:Printf(A請輸入你耍修改的航班號門;/*提示信息SCan

22、fr %sAs);/* 輸入航班名 */for(i=0;i<n;i+) /*從第條記錄開始門到最后條*/(If(StrCmP(s, ti. PlanenUmber) =0)/記錄 中 的航班名和待比較的是否相等*/break;/*相等Pl則返回該記錄的下標(biāo)號,機序捉前結(jié)? M*if(i>n-l) /*如果整數(shù)i值大于曠1 說明沒找到*/ 有找到 r);else fPrintf("航班號起飛城市降落城市出發(fā)時間降落時間剩下的座位價格折扣、);”找到,顯小原先記錄Printf(" 十);Prlntf C'%"12s%-12s%"A10s%

23、"12sVh-10s"7d%"-7s%"7sn',ti. planenumber, ti. Take.Off.City, ti. Ar rived.In-City, ti takeoff-time. t Landing-time, ti ShlPPing, ti- PriCei ti discount);PrintfcPIeaSe input the new Information: n*);SCanfe%s*, ti. PlanenUmber) ;/*輸入航班名*/SCanfC%s", ti. Take.Off.City) ;/*輸入

24、起始城市*/SCanfC%s", t i. ArrlVed-in-city) ; . *輸入終點城市7SCanfc%s*, ti. takeoffptime) ;/*輸入起 E 時間SCanfc%s* t i. Landing-time) : /*輸入降落時間*/SCanfc%d*ti. ShiPPing) ; /*輸入座位巧*scanfCQs", t i. PriCe) ; /*輸入票價*/SCanfC%s'ti. discount) ; /*輸入折扣)/*保存資料*/VOld SaVe(FLYt f int n)(int i, j;FILE *fp; /*指向文

25、件的指針if(fp二fopenC*,%b*)二二NULL)打開文件并判斷打開是否lE常(PrintfCCan not OPen filen") ;/*沒打開 exit(l);/* 退出*/PrintffAn保存文件iT); /*輸出提示信息*/fprintfffp, %d n);/*將記錄數(shù)寫入文件*/fprintf(fp, ArV);/*將換行符號寫入文件7for(i=0;i<n;i+-r)fprintf (fpt t S %s %s %s %s %d %s%s t i2 - PlanenUmben t i Take.Off.City, t i) ArriVed.in.cit

26、y, t i xakeoff.time, t i2 - Landing.time, ti ShiPPingit price, ti discount);fprintfffp, ArV) ;/*將換行符號寫入文件*/fprintf (fp, *%d*, ti. Sit);/*將記錄數(shù)寫入文件*, fprintf(fp, Ar的十將換行符號寫入文件*/for(j=OJ<ti.sitHfprintf (fp,譏 S %s %s %d%s*z, ti2 - guest j number, t i guest j name, ti- guest j Idi t i guest j count, t

27、 i2 guestj. flightname) : /*格式寫入記錄*/fprintfffp, ArnA ; /$將換行符號寫入文件*/)fclose(fp) ;/*關(guān)閉文件*PrintfC”*恭喜!保存成功*n"):LW>j<保存成功*/ )”讀入函數(shù).參數(shù)為結(jié)構(gòu)體數(shù)組材int lOad(FLYtO)(FILE *fp; /*指向文件的指針*/if(fp=fopen(", Sb")KNULL)/*打開文件*/ (Print422不能打開r) ;/*不能打開exit。);"退出*/)fscanf (fp, "%of &n);

28、 /*讀入記錄數(shù)*/for(i=0;i<n;i+-r)fscanf (fp, %s %s %s %s %s %s%s", t i2 - PlanenUmben t i - Take-Off-City, t i ArriVed-In-City, t i2 - takeoff-timei t i LandingA time, &t i ShiPPing, ti PriCeiti. discount);fscanf (fp,Sit); *i 頁入記錄數(shù)7for(j=OJ<ti.sitJ-)fscanfffp, "%s %s %s %d%s*, ti'

29、- guest j number, t i guest j name, t i guest j id, &t Ci guest j count, t i guest j. flightname) /按格式讀入記錄7)fclos e(fp);伙關(guān)閉文件7Primfr你己經(jīng)成功從文件讀取數(shù)據(jù)!nnn<); /*顯小讀取成功*/return n;返網(wǎng)記錄數(shù)7”主函數(shù)*/mainQint i;FLY flightQ;int length;/保存記錄K度*/for (;)/*無限循環(huán)*/(SWitCh(menu.selectO) W調(diào)用菜G函數(shù).返回值整數(shù)作開關(guān)語句的條件*/ (CaSe

30、0: length二ent er (flight) : break;/* 輸入記錄 */CaSe 1: liSt (flight, length) :break;/*-/j全部記錄*CaSe 2 : SearChl (flight, length);break; ' * 杏找記錄*CaSe 3: SearCh2(flight, length) ;break;/?t 找記錄*CaSe 4: book (flight, length): break; * 訂票*CaSe 5: quit (flight, length) :break;*退票*.CaSe 6: Channge(flight,

31、 Iength);break;" 1%改俄班仁息*CaSe 7:SaVe(flight, length) :break; *保存文件*CaSe 8: Iength=IOad(flight) ; break; *讀文件*CaSe 9: exit (0); Mllig回值為則程序結(jié)柬*/ ) )4.系統(tǒng)運行時窗口截圖:(下的運行結(jié)果)訂票系統(tǒng)菜單窗口肢任憊犍返回主菜單WCICOnC toTickets Booking System狂孥E裝充舌一、血荒 雪系飛文加入巴筑成蠹 云發(fā)-比普普蔑n艮修呆 讀退息信息班的信息 文件輸入你的選擇頂<©。9> =0 ,輸入航班的信

32、息輸人你的選擇項©9 M輸入航甥總%<n<=40> = 2輸入航班的信息航班號起飛城市降落城市出發(fā)時間降落時間剩下的座位價格折扣合肥 1。: 00 10: 40 500 809 0.8北京 8: 50 9: 50 500 1300 0.75按任意糕返回主菜單1 .列出航班的信息三1出發(fā)時何降落時問剩下的座位價格折扣123上海合星10; 0010; 40500124|南京北京8; 509,50500按任意鎮(zhèn)返回主菜單QQPinyin 半:2 .按航班號查詢航班信息輸你的選擇項曠夕:2輸入你桓查找的冼班"123航班號起飛城市降落城市出發(fā)時間降落 時問詢下的座位

33、彳介格折扣r*. MW W«KP*«A|1AIIVpa P* W AP U' W MV HMM VMH MV *B*«&*VM&M'MIIIMVWMIIB MX 123上海 合 j 巴 10: 0010: 405008000 8祓任意擺返回主菜單3 .按城市來查詢航班占一備起尊J節(jié)T成W每巴 客頂上 合降降落時間剩下的座位價格折扣123上每合肥 10: 0010: 405008000.8按仕意鍵返回主案單4 訂票程序頂曠9二4訂的票數(shù)航班號01關(guān)宏新2 124按任意鍵返回主菜卑5 .追票系統(tǒng)E

34、 I茍選洋項(0。9三5退訂隱航 MmHmH24號姓名證件號訂的弟數(shù)三i%土券6 .修改飛機航班的信息航班號起飛城市降落城市出發(fā)時間降落時間乘廳的座位價格折扣123上海合月巴 1R三附 10s 4RSRn8RnR.8IPIeaSe input the new information:125 上海合肥 9: 40 10: 05 450 750 0.97 保存文件輸入你的選擇項V0八9三7保存文任,、*«恭喜I,呆存成功*按任盍犍返回主菜單8,讀取文件、下載文件圖的遍歷過程演示1 . 需求分析:設(shè)計程序完成如下功能:對給定的圖的結(jié)構(gòu)和起點,產(chǎn)生深度

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

36、有從y出發(fā)可達(dá)的頂點之后,才回溯到頂點X,并且再選 擇一條從X出發(fā)的未檢測過的邊。上述過程直至從X出發(fā)的所有邊都己檢 測過為止。此時,若X不是源點,則回溯到在X之前被訪問過的頂點;否 則圖中所有和源點有路徑相通的頂點(即從源點可達(dá)的所有頂點)都己被訪問 過,若圖G是連通圖,則遍歷過程結(jié)束,否則繼續(xù)選擇一個尚未被訪問的 頂點作為新源點,進行新的搜索過程。廣度優(yōu)先遍歷:設(shè)X和y是兩個相繼要被訪問的未訪問過的頂點。它們的鄰接點分別記為xl,x2,., XS和yl,y2,., yto為確保先訪問的頂點其鄰接點亦先被訪問,在搜索過程中使用隊列來保存己 訪問過的頂點。當(dāng)訪問X和y時,這兩個頂點相繼入隊。此

37、后,當(dāng)X和y 相繼出隊時,我們分別從X和y出發(fā)搜索其鄰接點Xl,x2,,XS和yl, y2,,yt,對其中未訪者進行訪問并將其入隊。這種方法是將每個已訪問的 頂點入隊,故保證了每個頂點至多只有一次入隊。A.圖的算法構(gòu)造思想:1. CreateALGraPhQ初始條件:V是圖的頂點集,VR是圖中弧的集合.操作結(jié)果:按V和VR是定義構(gòu)造圖G.2. DeStrOyGraPh(&G)初始條件:圖G存在操作結(jié)果:銷毀圖G3. LOCateVexfG, U)初始條件:圖G存在山和G中頂點有相同的特征操作結(jié)果:若圖G中存在頂點u,則返回該頂點在圖中的位置;否則返回其他信息4. GetVeX G, V

38、)初始條件:圖G存在,v是G中頂點操作結(jié)果返回V的值5. FirStAjVeX (& v)初始條件:圖G存在,v是G中頂點操作結(jié)果:返回V的第一個鄰接頂點,若頂在圖中沒有鄰接頂點,則返回為空6. NeXtAjvex (G, v, W)初始條件:圖G存在,v是G中頂點,w是V的鄰接頂點操作結(jié)果:返回V的下一個鄰接頂點,若W是V的最后一個鄰接頂點則返回空7. DeleteVeXX (&G, V)初始條件:圖G存在,v是G中頂點 操作結(jié)果:刪除頂點V己經(jīng)其相關(guān)的弧8. DFStraverse (ALGraPh)初始條件:圖G存在,visit的頂點的應(yīng)用函數(shù)操作結(jié)果:對圖進行深度優(yōu)先遍

39、歷,在遍歷過程中對每個結(jié)點調(diào)用Visit函數(shù)一次,一旦Visit失敗,則操作失敗9. BFStraVerSe(ALGraPh)初始條件:圖G存在,visit的頂點的應(yīng)用函數(shù)操作結(jié)果:對圖進行廣度優(yōu)先遍歷,在遍歷過程中對每個結(jié)點調(diào)用Visit函數(shù)一次,一旦Visit失敗,則操作失敗附圖的結(jié)構(gòu)體構(gòu)造:ALGraPh數(shù)據(jù)對象V: V是具有相同特性的數(shù)據(jù)元素的集合,稱為點集.數(shù)據(jù)關(guān)系R:R=VRVR=(v, W) V, W屬于V, (v, w)表示V和W之間存在的路 徑B.隊列的算法構(gòu)造:1. Init_SeqQueue Q操作結(jié)果:構(gòu)造一個空隊列Q2. DeStryOQUeUe(&Q)初始條

40、件:隊列Q己存在。操作結(jié)果:隊列Q被銷毀,不再存在。3. In.SeqQUeUe Q初始條件:隊列Q己經(jīng)存在操作結(jié)果插入元素e為Q的新的隊尾元素4. Out_S eq Queue 0初始條件:Q為非空隊列操作結(jié)果:刪除Q的隊尾元素,并用e返回其值5. EmPty_SeqQueue 0初始條件:隊列己經(jīng)存在操作結(jié)果:若隊列為空,則返回TRUE,否則返回FLASEC.木程序包含的模板:1 .程序模塊Main 0取得頂點數(shù)和弧數(shù);生成鄰接表結(jié)構(gòu)的圖;深度遍歷圖;廣度遍歷圖;2 .造鄰接表結(jié)構(gòu)的圖;3 .度優(yōu)先遍歷圖;4 .度優(yōu)先遍歷圖;5 .列的基木操作模塊;6 .數(shù)聲明模塊;三源程序代碼:(VC+

41、下運行)A include <>A include <>Ainclude 0Hdefine MAXeVERTEXeNUM 50 <):n"):PrintfC輸入圖的頂點數(shù)和孤數(shù):n格式:頂點數(shù),弧數(shù):例如:5,4子);2, 4rr);PrlntfU接著輸入各邊(弧星,弧頭):n例如:5,3n3, ln 1, 2nPrlntfr程序會生成一個圖并對它進行深咬和廣度遍歷.配);Printfr 深度遹歷:1->2->4-3->5n '度遍歷:1->2->3->4->5n*);Hwhile。!三,N- Mj!=1

42、n )(Prlntf (An請輸入頂點數(shù)和弧數(shù):0;SCanfC%d, %d &, & 輸入圖的頂點數(shù)和弧數(shù)CreateGraPh(G); /生成鄰接表結(jié)構(gòu)的圖DFSTraVerse(G); 深度優(yōu)先搜索刪力圖BFSTraVerSe(G); 廣度優(yōu)先搜索遍歷圖Printf (*圖遍歷完畢,繼續(xù)進行嗎(Y/N)*);SCanfc %c: &j);)Void CreateGraPh(GraPh &G)( 構(gòu)造鄰接表結(jié)構(gòu)的圖Gint i;int start, end;ArCNOde *s;for(i=lji<=ji+) i=NVLL; 初始化指針數(shù)組for(i=

43、l;i<=;i+)scanf( S d, %d % start, &end); 輸入弧的起點和終點S= (ArCNOde *)malloc (sizeof (ArcNode) : /7 '上成個弧結(jié)點 s->nextarc= start; 插入到鄰接表中sH>adjvex=end;start=s;s=(ArCNOde *)malloc (SiZeOf(ArCNOde);sH>nextarc=end;sn>adjvex=start;lend二 s;)VOld DFSTraVerSefGraPh G)深度優(yōu)先遍歷圖Gint i;Prlntfr深度優(yōu)先遍

44、歷:J;for(i=l;i<=; i+A) ViSited i =F alse;訪問標(biāo)志數(shù)組初始化for(i=l;i<=;i+)if(!visitedi) DFS(Gi i):對尚未訪問的頂點調(diào)用DFSPrintf(Abb r);)VOld DFSfGraPh G» int i)從第i個頂點出發(fā)遞歸地深度遍歷圖Gint w;ViSitedi=True; 訪問第i個頂點for (W=FirStAdjVeX (G, i) ;w>0 JW=NextAdjVex (Gfi, W) if(!visitedw) DFS(Giw); 對尚未訪問的鉆接頂點誓調(diào) 用 DFSVOld BFSTraVerSefGraPh G)按廣度優(yōu)先非遞歸的遍歷圖G使用輔助隊列Q利訪問標(biāo)總:數(shù)組ViSitedint ii u, w;SqQUeUe Q;Printfir度優(yōu)先遍歷:J

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論