




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
目錄一、課題的主要功..................................................................31.1程序的功.................................................................31.2.輸入輸出的要.............................................................31.3運(yùn)行環(huán)...................................................................31.4開發(fā)工...................................................................3二、概要設(shè)........................................................................42.1程序的模塊組..............................................................42.2模塊的層次結(jié)構(gòu)及調(diào)用關(guān)....................................................42.3模塊的主要功..............................................................42.4數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)庫結(jié)構(gòu)........................................................5三.主要功能的實(shí)..................................................................53.1用C語言定義相關(guān)的數(shù)據(jù)類型..............................................53.2主要函數(shù)的流程............................................................53.3畫出各函數(shù)的調(diào)用關(guān)系.....................................................12四、程序調(diào).......................................................................134.1測試數(shù)據(jù)................................................................134.2使用說..................................................................14五.心得體.......................................................................17六、附...........................................................................156.1參考書..................................................................156.2源程序清單(帶注釋).......................................................16
一、課題的主要功1.1程序的功每學(xué)期的時(shí)間長度和學(xué)分上限均相等。每個(gè)專業(yè)開設(shè)的課程都是確定的,而且課程在開設(shè)時(shí)間的安排必須滿足先修關(guān)系。每門課程有哪些先修課程是確定的,可以有任意多門,也可以沒有。每門課恰好占一個(gè)學(xué)期。試在這樣的前提下設(shè)計(jì)一個(gè)教學(xué)計(jì)劃編制程序制定好學(xué)習(xí)計(jì)劃。在輸入相關(guān)數(shù)據(jù)后,程序會(huì)安排好每學(xué)期的課程1.2.輸入輸出的要求輸入?yún)?shù)包括學(xué)期總數(shù)一學(xué)期的學(xué)分上限每門課的課程(固定占3位的字母數(shù)字串學(xué)分和直接先修課的課程號輸出要求輸出各門課程所對應(yīng)的學(xué)分,以及每學(xué)期各門課程的安排1.3運(yùn)行環(huán)境1.WINDOWS7系2.Vc++6.0編譯環(huán)境1.4開發(fā)工具C 第3頁
二、概要設(shè)2.1所負(fù)責(zé)的程序的模塊LocateVe(:圖的鄰接表存儲(chǔ)的基本操CreateGraph(:構(gòu)造生成Display(:輸出圖的鄰接矩FindInDegree:求頂點(diǎn)的入2.2模塊的層次結(jié)構(gòu)及調(diào)用關(guān)系函TopologicalSor2.3模塊的主要功能y出圖的鄰接陣CreateGrap生成圖見“詳細(xì)設(shè)計(jì)”-“主要函數(shù)流程圖 第4頁
2.4數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)庫結(jié)構(gòu)儲(chǔ)存的數(shù)據(jù)為結(jié)構(gòu)體類型數(shù)組,以及結(jié)構(gòu)體單鏈表結(jié)點(diǎn)類型1typedefstructArcNode弧所指定點(diǎn)位置 指向下一條弧的指針 網(wǎng)的權(quán)值指針int struct InfoType2typedefstruct頂點(diǎn)信息 第一個(gè)表結(jié)點(diǎn)的地址VertexType ArcNode三.主要功能的實(shí)3.1采用C語言定義相關(guān)的數(shù)據(jù)類型。其中包括字符常量,整型,字符型,字符串型,typedef定義的類型,結(jié)構(gòu)體型,單鏈表節(jié)點(diǎn)類型,結(jié)構(gòu)體數(shù)組3.2主要函數(shù)的流程圖1.LocateVex(:圖的鄰接表存儲(chǔ)的基本操作。由初始條件:圖G存在u和G轉(zhuǎn)而進(jìn)行判斷,若G中存在頂點(diǎn)u,則返回該頂點(diǎn)在圖中位置否則返回1 第5頁
i=0.vexnum++i2.CreateGrap(構(gòu)造生成圖采用鄰接表存儲(chǔ)結(jié)構(gòu),構(gòu)造沒有相關(guān)信息的圖種圖 第6頁
i=0
++i
++i請輸%d個(gè)課程的學(xué)分值”)i=0++i3.Displa(:輸出圖的鄰接矩陣。采用循環(huán)設(shè)置輸出圖的鄰接矩陣 第7頁
.kind=DG.kind=DG.kind=DG個(gè)頂點(diǎn): i=0i<Gvexnum++i4.FindInDegre(:求頂點(diǎn)的入度 第8頁
i=0.vexnumi++i=0.vexnump=p所負(fù)責(zé)的部分程序/*圖的鄰接表存儲(chǔ)的基本操*/intLocateVex(ALGraphG,VertexTypeu){/*初始條件圖在u和G中頂點(diǎn)有相同特征*/ 第9頁
操作結(jié):G中存在頂點(diǎn)u,則返回該頂點(diǎn)在圖中位置否則返回-1*/inti;for(i=0;i<G.vexnum;++i)if(strcmp(u,G.vertices[i].data)==0)returni;return-1;}StatusCreateGraph(ALGraph*G){/*采用鄰接表存儲(chǔ)結(jié)構(gòu),構(gòu)造沒有相關(guān)信息的G(用一個(gè)函數(shù)構(gòu)造種圖)*/inti,j,k;VertexTypeva,vb;ArcNode*p;請輸入d個(gè)課程的代表請輸入d個(gè)課程的代表*/for(i=0;i<(*G).vexnum;++i)/*構(gòu)造頂點(diǎn)向*/*/(*G).vertices[i].firstarc=NULL;}for(i=0;i<(*G).vexnum;++i)/*構(gòu)造頂點(diǎn)向for(i=0;i<(*G).vexnum;++i)/*構(gòu)造頂點(diǎn)向*/*/}請順序輸入每條弧邊)的弧尾和弧頭請順序輸入每條弧邊)的弧尾和弧頭*/for(k=0;k<(*G).arcnum;++k)/*構(gòu)造表結(jié)點(diǎn)鏈表*/*/i=LocateVex(*G,va);/*弧尾
j=LocateVex(*G,vb);/*弧頭p=(ArcNode*)malloc(sizeof(ArcNode));p->adjvex=j;p->info=NULL;/*圖*/p->nextarc=(*G).vertices[i].firstarc;/*插在表頭*/(*G).vertices[i].firstarc=p;}returnOK;}voidDisplay(ALGraphG){/*輸出圖的鄰接矩G*/inti;ArcNode*p;switch(G.kind)switch(G.kind)switch(G.kind)}for(i=0;i<G.vexnum;++i)for(i=0;i<G.vexnum;++i)for(i=0;i<G.vexnum;++i)for(i=0;i<G.vexnum;++i)for(i=0;i<G.vexnum;++i)弧(for(i=0;i<G.vexnum;i++){p=G.vertices[i].firstarc;while(p)while(p)while(p)p=p->nextarc;}}
voidFindInDegree(ALGraphG,intindegree[]){/*求頂點(diǎn)的入度,算法調(diào)*/inti;ArcNode*p;for(i=0;i<G.vexnum;i++)indegree[i]=0;/*賦初值*/for(i=0;i<G.vexnum;i++){p=G.vertices[i].firstarc;while(p){indegree[p->adjvex]++;p=p->nextarc;}}}3.3畫出各函數(shù)的調(diào)用關(guān)系圖Main函數(shù)( (
四、程序調(diào)4.1測試數(shù)據(jù):準(zhǔn)備典型的測試數(shù)據(jù)和測試方案數(shù)據(jù)如下:學(xué)期總數(shù):學(xué)分上限:10該專業(yè)共開設(shè)課數(shù)12課程號:從C01到C12學(xué)分順序2,,,3,3,,,75,,先修順序有向圖表示)10136578
明輸入學(xué)期總數(shù),學(xué)分上限,課程數(shù),先修關(guān)系邊
輸入課程代表符號輸入相對學(xué)分值
回車,將顯示頂點(diǎn)的個(gè)數(shù)和弧的條輸入完成后執(zhí)行可得到每個(gè)學(xué)期的課程計(jì)劃結(jié)
.會(huì)雖這門課程讓我從C總結(jié)提升的作用。在學(xué)習(xí)了這門課程后,我們進(jìn)行課的內(nèi)容。由于程序十分的復(fù)雜,遇到了很多常見的語法錯(cuò)誤,及邏輯錯(cuò)誤。這需要我們不斷的調(diào)試分析。符號的格式之類,指針的用法,判斷輸入輸出的條件都是十分容易出錯(cuò)的地方。在逐條排除,向同學(xué)老師請教后,程序終于得以完成。這讓我明白了,解決問題,要細(xì)心認(rèn)真,集思廣益,這樣才能把問題解決六、附錄6.1參考書目1黃同成,黃俊民,董建寅.?dāng)?shù)據(jù)結(jié)構(gòu)[M].北京:中國電力出版社,20082董建寅,黃俊民,黃同成.?dāng)?shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)指導(dǎo)與題解[M].北京:中國電力出版社,20083嚴(yán)蔚敏,吳偉民.數(shù)據(jù)結(jié)構(gòu)(C語言版)[M].北京:清華大學(xué)出版社,20024唐策善,李龍澍,黃劉生.?dāng)?shù)據(jù)結(jié)構(gòu)—用C語言描述[M].北京:高等教育出版社,20016.2源程序清單(帶注釋)#include<string.h>#include<ctype.h>#include<malloc.h>//malloc()#include<limits.h>//INT_MAX#include<stdio.h>//EOF(=^或F6),NULL#include<stdlib.h>//atoi()52#include<io.h>//eof()#include<math.h>//floor(),ceil(),abs()#include<process.h>//exit()
#include<iostream.h>//cout,cin//函數(shù)結(jié)果狀態(tài)代#defineTRUE1#defineFALSE0#defineOK1#defineERROR0#defineINFEASIBLE-1typedefintStatus;//Status是函數(shù)的類型,其值是函數(shù)結(jié)果狀態(tài)代碼,如OKtypedefintBoolean;//Boolea是布爾類型,其值是TRUEFALSE#defineMAX_NAME10/*頂點(diǎn)字符串的最大長度*/#defineMAXCLASS100intZ=0;intX=0;intxqzs,q=1,xfsx;typedefintInfoType;typedefcharVertexType[MAX_NAME];/*字符串類型*//*圖的鄰接表存儲(chǔ)表*/#defineMAX_VERTEX_NUM100typedefenum{DG}GraphKind;/*有向圖,有向無向圖,無向網(wǎng)}*/typedefstructArcNode{intadjvex;/*該弧所指向的頂點(diǎn)的位*/structArcNode*nextarc;/*指向下一條弧的指針*/InfoType*info;/*網(wǎng)的權(quán)值指針*/}ArcNode;/*表結(jié)點(diǎn)*/typedefstruct{VertexTypedata;/*頂點(diǎn)信息*/ArcNode*firstarc;/*第一個(gè)表結(jié)點(diǎn)的地址指向第一條依附該頂點(diǎn)的弧的指針*/
}VNode,AdjList[MAX_VERTEX_NUM];/*頭結(jié)點(diǎn)*/typedefstruct{AdjListvertices,verticestwo;intvexnum,arcnum;/*圖的當(dāng)前頂點(diǎn)數(shù)和弧*/intkind;/*圖的種類標(biāo)*/}ALGraph;/*圖的鄰接表存儲(chǔ)的基本操*/intLocateVex(ALGraphG,VertexTypeu){/*初始條件圖在u和G中頂點(diǎn)有相同特征*//*操作結(jié):G中存在頂點(diǎn)u,則返回該頂點(diǎn)在圖中位置否則返回-1*/inti;for(i=0;i<G.vexnum;++i)if(strcmp(u,G.vertices[i].data)==0)returni;return-1;}StatusCreateGraph(ALGraph*G){/*采用鄰接表存儲(chǔ)結(jié)構(gòu),構(gòu)造沒有相關(guān)信息的G(用一個(gè)函數(shù)構(gòu)造種圖)*/inti,j,k;VertexTypeva,vb;ArcNode*p;請輸入d個(gè)課程的代表請輸入d個(gè)課程的代表for(i=0;i<(*G).vexnum;++i)/*構(gòu)造頂點(diǎn)向*/
(*G).vertices[i].firstarc=NULL;}for(i=0;i<(*G).vexnum;++i)/*構(gòu)造頂點(diǎn)向for(i=0;i<(*G).vexnum;++i)/*構(gòu)造頂點(diǎn)向*/*/}請順序輸入每條弧請順序輸入每條弧邊)的弧尾和弧頭*/for(k=0;k<(*G).arcnum;++k)/*構(gòu)造表結(jié)點(diǎn)鏈表*/i=LocateVex(*G,va);/*弧尾j=LocateVex(*G,vb);/*弧頭p=(ArcNode*)malloc(sizeof(ArcNode));p->adjvex=j;p->info=NULL;/*圖*/p->nextarc=(*G).vertices[i].firstarc;/*插在表頭*/(*G).vertices[i].firstarc=p;}returnOK;}voidDisplay(ALGraphG){/*輸出圖的鄰接矩G*/inti;ArcNode*p;switch(G.kind)switch(G.kind)switch(G.kind)}for(i=0;i<G.vexnum;++i)
弧(for(i=0;i<G.vexnum;i++){p=G.vertices[i].firstarc;while(p)while(p)while(p)p=p->nextarc;}}}voidFindInDegree(ALGraphG,intindegree[]){/*求頂點(diǎn)的入度,算法調(diào)*/inti;ArcNode*p;for(i=0;i<G.vexnum;i++)indegree[i]=0;/*賦初值*/for(i=0;i<G.vexnum;i++){p=G.vertices[i].firstarc;while(p){indegree[p->adjvex]++;p=p->nextarc;}}}typedefintSElemType;/*棧類*//*棧的順序存儲(chǔ)表示*/#defineSTACK_INIT_SIZE10/*存儲(chǔ)空間初始分配量*/
#defineSTACKINCREMENT2/*存儲(chǔ)空間分配增*/typedefstructSqStack{SElemType*base;/*在棧構(gòu)造之前和銷毀之后,base的值為NULL*/SElemType*top;/*棧頂指針*/intstacksize;/*當(dāng)前已分配的存儲(chǔ)空間,以元素為單*/}SqStack;/*順序棧*//*順序棧的基本操作*/StatusInitStack(SqStack*S){/*構(gòu)造一個(gè)空S*/(*S).base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType));if(!(*S).base)exit(OVERFLOW);/*存儲(chǔ)分配失敗(*S).top=(*S).base;(*S).stacksize=STACK_INIT_SIZE;returnOK;}voidClearStack(SqStack*S)//清空棧的操{ S->top=S->base;}StatusStackEmpty(SqStackS){/*若棧S為空棧,則返回TRUE,否則返回FALSE*/if(S.top==S.base)returnTRUE;elsereturnFALSE;
StatusPop(SqStack*S,SElemType*e){/*若棧不空,則刪的棧頂元素,e返回其值,并返回OK;否則返回ERROR*/if((*S).top==(*S).base)returnERROR;*e=*--(*S).top;returnOK;}StatusPush(SqStack*S,SElemTypee){/*插入元e為新的棧頂元*/if((*S).top-(*S).base>=(*S).stacksize)/*棧滿,追加存儲(chǔ)空*/{(*S).base=(SElemType*)realloc((*S).base,((*S).stacksize+STACKINCREMENT)*sizeof(SElemType));if(!(*S).base)exit(OVERFLOW);/*存儲(chǔ)分配失敗*/(*S).top=(*S).base+(*S).stacksize;(*S).stacksize+=STACKINCREMENT;}*((*S).top)++=e;returnOK;}typedefintpathone[MAXCLASS];typedefintpathtwo[MAXCLASS];
StatusTopologicalSort(ALGraphG){/*有向圖采用鄰接表存儲(chǔ)結(jié)構(gòu)。若無回路,則輸出的頂點(diǎn)的一個(gè)拓?fù)湫蛄胁⒎祷豋K,*//*否則返ERROR。inti,k,j=0,count,indegree[MAX_VERTEX_NUM];boolhas=false;SqStackS;pathonea;pathtwob;ArcNode*p;FindInDegree(G,indegree);/*對各頂點(diǎn)求入indegree[0..vernum-1]*/InitStack(&S);/*初始化*/for(i=0;i<G.vexnum;++i)/*建零入度頂點(diǎn)棧S*/if(!indegree[i]) {Push(&S,i); //cout<<*G.vertices[i].data<<endl; } /*入度為者進(jìn)棧*/count=0;/*對輸出頂點(diǎn)計(jì)*/while(!StackEmpty(S)){/*棧不*/Pop(&S,&i);a[i]=*G.vertices[i].data;b[i]=*G.verticestwo[i].data;b[i]=*G.verticestwo[i].data;b[i]=*G.verticestwo[i].data;課程s分出號頂點(diǎn)并計(jì)數(shù)*/++count;for(p=G.vertices[i].firstarc;p;p=p->nextarc){/*對號頂點(diǎn)的每個(gè)鄰接點(diǎn)的入度減*/k=p->adjvex;
if(!(--indegree[k]))/*若入度減,棧*/ {Push(&S,k); //cout<<*G.vertices[i].data<<endl; }}}if(count<G.vexnum)if(count<G.vexnum)returnERROR;}elseelseelse為一個(gè)拓?fù)湫蛄小?has=tru
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 教育在線培訓(xùn)服務(wù)協(xié)議
- 建筑項(xiàng)目設(shè)計(jì)及施工合作協(xié)議
- 大灣區(qū)新興產(chǎn)業(yè)發(fā)展項(xiàng)目合作框架協(xié)議
- 環(huán)保科技項(xiàng)目研發(fā)與推廣合同
- 總包單位簽訂分包合同
- 買賣手房反擔(dān)保合同
- 承包合同養(yǎng)殖合同
- 私人拖拉機(jī)買賣合同書
- 手房地產(chǎn)轉(zhuǎn)讓居間合同
- 游戲項(xiàng)目開發(fā)授權(quán)及運(yùn)營協(xié)議
- 湘教版三年級美術(shù)下冊教案全冊
- (高清版)DB15∕T 3585-2024 高標(biāo)準(zhǔn)農(nóng)田施工質(zhì)量評定規(guī)程
- 試油(氣)HSE作業(yè)指導(dǎo)書
- 重癥監(jiān)護(hù)-ICU的設(shè)置、管理與常用監(jiān)測技術(shù)
- 法律顧問服務(wù)投標(biāo)方案(完整技術(shù)標(biāo))
- 中醫(yī)藥三方合作協(xié)議書范本
- 2024年《動(dòng)漫藝術(shù)概論》自考復(fù)習(xí)題庫(附答案)
- 2024年職業(yè)技能“大數(shù)據(jù)考試”專業(yè)技術(shù)人員繼續(xù)教育考試題庫與答案
- 慢病報(bào)卡系統(tǒng)使用流程圖
- 2024年遼寧軌道交通職業(yè)學(xué)院單招職業(yè)適應(yīng)性測試題庫含答案
- 小升初數(shù)學(xué)總復(fù)習(xí)專題訓(xùn)練:平行四邊形的面積與梯形的面積
評論
0/150
提交評論