




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
..第1頁上海應用技術學院課程設計報告課程名稱《數(shù)據結構課程設計》設計題目數(shù)據結構課程設計院系計算機科學與信息工程學院專業(yè)游戲軟件制作與開發(fā)班級姓名學號指導教師日期2016-1-14目的與要求鞏固和加深對常見數(shù)據結構的理解和掌握掌握基于數(shù)據結構進行算法設計的基本方法掌握用高級語言實現(xiàn)算法的基本技能掌握書寫程序設計說明文檔的能力提高運用數(shù)據結構知識及高級語言解決非數(shù)值實際問題的能力課程設計內容說明項目一對設計任務內容的概述實現(xiàn)十進制數(shù)N和二進制數(shù)之間的轉換。需求分析或功能描述輸入相應的各式正確的數(shù)值〔可以是混合小數(shù)的形式,程序按照設定的算法執(zhí)行后,給出相對應的進制數(shù)數(shù)值,對于輸入數(shù)據的合法性可以不做檢查。采用棧。概要設計或程序流程圖內容:利用棧實現(xiàn)十進制和其他任意進制數(shù)的任意轉換輸出問題進制轉換原理:N=<Ndivd>*d+Nmodd<其中:div為整除運算,mod為求余運算>步驟:1定義棧數(shù)據類型,采用鏈式存儲結構實現(xiàn)2鏈棧基本操作函數(shù)原型聲明3初始化棧4輸入棧5輸出棧6判空棧7自定義實現(xiàn)進制轉換函數(shù)8數(shù)據調試9程序結束開始開始創(chuàng)建棧創(chuàng)建棧數(shù)制轉換函數(shù)數(shù)制轉換函數(shù)輸出結果輸出結果詳細設計或源代碼說明#defineSTACK_INIT_SIZE100//存儲空間初始分配量#defineSTACKINCREMENT10//存儲空間分配增量#defineERROR0#defineOVERFLOW-2#include<stdio.h>#include<string.h>#include<stdlib.h>#include<malloc.h>#include<process.h>#include"math.h"typedefintSElemType;typedefstruct{SElemType*base;//在棧構造之前和銷毀之后,base的值為NULLSElemType*top;//棧頂指針intStackSize;//當前已分配的存儲空間,以元素為單位}SqStack1;voidInitStack<SqStack1*s>//初始化棧{s->base=<SElemType*>malloc<STACK_INIT_SIZE*sizeof<SElemType>>;if<!s->base>exit<OVERFLOW>;s->top=s->base;s->StackSize=STACK_INIT_SIZE;}voidPush<SqStack1*s,SElemTypee>//輸入棧{if<s->top-s->base>=s->StackSize>{s->base=<SElemType*>realloc<s->base,<s->StackSize+STACKINCREMENT>*sizeof<SElemType>>;//棧滿,追加存儲空間if<!s->base>exit<OVERFLOW>;//若內存中沒有s->StackSize+STACKINCREMENT個連續(xù)空間則分配失敗s->top=s->base+s->StackSize;s->StackSize+=STACKINCREMENT;}*s->top++=e;}intPop<SqStack1*s,SElemType*e>//輸出棧{if<s->top==s->base>returnERROR;s->top=s->top-1;*e=*s->top;}intStackEmpty<SqStack1s>//判空棧{if<s.top==s.base>return1;elsereturn0;}voidConversion<intN,intm>{SElemTypee;SqStack1s;InitStack<&s>;while<N>{Push<&s,N%m>;N=N/m;}printf<"轉換后的%d進制數(shù)為:",m>;while<StackEmpty<s>!=1>{Pop<&s,&e>;if<e>=10>printf<"%c",e-10+'A'>;elseprintf<"%d",e>;}printf<"\n">;}voidsqunion<>{intn,m;printf<"請輸入一個十進制數(shù):">;scanf<"%d",&n>;printf<"需要轉成的進制m:">;scanf<"%d",&m>;Conversion<n,m>;}voidlinkunion<>{inta,i,k=-1,y=0;printf<"\n請輸入一個正確的二進制數(shù):">;scanf<"%d",&a>;printf<"\n%d十進制為:",a>;while<a!=0>{i=a%10;k++;y+=i*pow<2,k>;a=a/10;}printf<"%d\n",y>;}voidlist1<>{ inti,flag=1,k; while<flag> { printf<"**************************************\n">; printf<"\t1:十進制轉換為任意進制\n">;printf<"\t2:二進制轉換為十進制\n">; printf<"\t0:返回\n">; printf<"\t請選擇:\n">;printf<"**************************************\n">; while<true> { scanf<"%d",&i>; if<i>=0&&i<=2> break; else printf<"請選擇0--2:\n">; } switch<i> { case1:squnion<>;break; case2:linkunion<>;break; case0:{flag=0;break;} } }}程序模塊及其接口描述voidInitStack<SqStack1*s>//初始化棧voidPush<SqStack1*s,SElemTypee>//輸入棧intPop<SqStack1*s,SElemType*e>//輸出棧intStackEmpty<SqStack1s>//判空棧voidConversion<intN,intm>功能是:將十進制轉換為其他進制voidlinkunion<>功能是:將二進制轉換為十進制程序的輸入與輸出描述輸入要求的整數(shù)輸出二進制調試分析或程序測試在主界面中選擇"1"進入進制轉換子界面在子界面中選擇"1"進入十進制轉換為其他進制的測試,輸入:99,轉換為二進制,得出:1100011在子界面中選擇"2",進行二進制轉換為十進制測試。測試結果如下:輸入"0",正常返回主界面。尚未解決的問題或改進方向未完善的問題:不能由二進制直接轉換為任意進制;在十進制轉換過程中不能輸入小數(shù)。改進方向:界面美化;調整程序,使其可以輸入小數(shù)。對軟件的使用說明根據界面提示選擇需要的操作,輸入整數(shù),注意二進制只包含"1""0"。項目二對設計任務內容的概述任務:要求實現(xiàn)對學生資料的錄入、瀏覽、插入和刪除等功能。輸入:設學生成績以記錄形式存儲,每個學生記錄包含的信息有:學號和各門課程的成績。存儲結構:采用線性鏈式結構。需求分析或功能描述管理系統(tǒng)中有五個要求:輸入查找修改插入刪除存儲輸入要求:能夠通過鍵盤輸入和文件輸入兩種查找要求:能夠根據學生號查找單個學生的信息,也可以遍歷所有學生信息修改要求:能夠根據學生號修改單個學生所有信息插入要求:能夠實現(xiàn)頭插和尾插刪除要求:能夠根據學生號刪除單個學生信息存儲要求:通過鏈表存儲所有信息概要設計或程序流程圖首先,分析題目要求劃分實現(xiàn)模塊,定義基本數(shù)據類型,諸如結構體、鏈表等;其次,針對上述的基本操作實現(xiàn)具體需要進行的操作,具體實現(xiàn)每個環(huán)節(jié)需要進行的基本操作,即具體編寫每個小函數(shù)實現(xiàn)功能;最后,編寫主函數(shù)對每個實現(xiàn)進行按需調用,實現(xiàn)操作。詳細設計或源代碼說明#include<stdio.h>#include<malloc.h>#include<string.h>structStudent{charname[10];charsubject[10];intnum;intgrade;Student*next;};voidStuMain<>;//學生成績管理系統(tǒng)的主函數(shù),由main函數(shù)調用voidStuInput<Student*>;//學生成績管理系統(tǒng)的輸入函數(shù),由主函數(shù)調用voidStuSelect<Student*>;//學生成績管理系統(tǒng)的查找函數(shù),由主函數(shù)調用voidStuAlter<Student*>;//學生成績管理系統(tǒng)的修改函數(shù),由主函數(shù)調用voidStuInsert<Student*>;//學生成績管理系統(tǒng)的插入函數(shù),由主函數(shù)調用voidStuDelect<Student*>;//學生成績管理系統(tǒng)的刪除函數(shù),由主函數(shù)調用voidStuSave<Student*>;//學生成績管理系統(tǒng)的存儲函數(shù),由主函數(shù)調用voidStuOutput<Student*p>;//輸出函數(shù)intStuImport<Student*head,Student*p>;//輸入函數(shù)voidStuOutput<Student*p>//打印函數(shù),將鏈表的該節(jié)點信息輸出{printf<"學生__">;printf<"%s",p->name>;printf<"學生號:">;printf<"%d",p->num>;printf<"科目:">;printf<"%s",p->subject>;printf<"學生成績:">;printf<"%d\n",p->grade>;}intStuImport<Student*head,Student*p>{Student*Opinion=<Student*>malloc<sizeof<Student>>;//用來判斷輸入節(jié)點中學生號是否有重復Opinion=head->next;printf<"學生__\n">;scanf<"%s",p->name>;printf<"學生號:\n">;scanf<"%d",&p->num>;printf<"科目:\n">;scanf<"%s",p->subject>;if<Opinion!=NULL>{if<Opinion->num==p->num&&!strcmp<Opinion->subject,p->subject>>{printf<"該學生這門科目已有成績,請重新輸入\n">;return1;}Opinion=Opinion->next;}printf<"學生成績:\n">;scanf<"%d",&p->grade>;return0;}voidlist2<>{StuMain<>;}voidStuMain<>{chardecide='y';//定義while變量,函數(shù)是否繼續(xù)進行intnum=1;//定義switch變量,函數(shù)跳轉到哪個子函數(shù)Student*head;//定義鏈表的頭指針head=<Student*>malloc<sizeof<Student>>;//給頭指針開辟空間head->next=NULL;//初始化頭指針while<decide!='n'>{printf<"***************************************************\n">;printf<"**********1輸入2查找3修改4插入********\n">;printf<"**********5刪除6存儲7退出********\n">;printf<"***************************************************\n">;scanf<"%d",&num>;switch<num>{case1:StuInput<head>;break;case2:StuSelect<head>;break;case3:StuAlter<head>;break;case4:StuInsert<head>;break;case5:StuDelect<head>;break;case6:StuSave<head>;break;default:decide='n';break;}};}voidStuInputHand<Student*head>;//學生成績管理系統(tǒng)的手動輸入函數(shù),由輸入函數(shù)調用voidStuInputFile<Student*head>;//學生成績管理系統(tǒng)的文件輸入函數(shù),由輸入函數(shù)調用voidStuInput<Student*head>//學生成績管理系統(tǒng)的輸入函數(shù),由主函數(shù)調用{chardecide='y';//定義while變量,函數(shù)是否繼續(xù)進行intnum;//定義switch變量,函數(shù)跳轉到哪個子函數(shù)while<decide!='n'>{printf<"***************************************************\n">;printf<"**1手動輸入2文件輸入3退出**\n">;printf<"***************************************************\n">;scanf<"%d",&num>;switch<num>{case1:StuInputHand<head>;break;case2:StuInputFile<head>;default:decide='n';break;}}}voidStuInputHand<Student*head>//學生成績管理系統(tǒng)的手動輸入函數(shù),由輸入函數(shù)調用{if<head->next==NULL>{Student*point=<Student*>malloc<sizeof<Student>>;//鏈表中最后一個節(jié)點,只在該函數(shù)中存在point->next=NULL;intdecide=1;while<decide!=0>{Student*p=<Student*>malloc<sizeof<Student>>;p->next=NULL;StuImport<head,p>;if<head->next==NULL>{head->next=p;point=p;}else {point->next=p;point=p;}printf<"是否繼續(xù):1/0\n">;scanf<"%d",&decide>;}}elseprintf<"管理系統(tǒng)中已存在信息,若想輸入學生信息,請轉插入子系統(tǒng)">;}voidStuInputFile<Student*head>//學生成績管理系統(tǒng)的文件輸入函數(shù),由輸入函數(shù)調用{if<head->next!=NULL>{printf<"學生管理系統(tǒng)中已有信息,請?zhí)D到插入選項\n">;}FILE*fp;printf<"請輸入文件名〔包括物理地址\n">;charfilename[10];scanf<"%s",filename>;if<<fp=fopen<filename,"r">>==NULL>{printf<"cannotopenfile\n">;return;}Student*point=<Student*>malloc<sizeof<Student>>;Student*Opinion=<Student*>malloc<sizeof<Student>>;//用來判斷輸入節(jié)點中學生號是否有重復while<!feof<fp>>{Opinion=head->next;Student*p=<Student*>malloc<sizeof<Student>>;p->next=NULL;fread<p,sizeof<Student>,1,fp>;if<Opinion!=NULL>{if<Opinion->num==p->num&&!strcmp<Opinion->subject,p->subject>>{printf<"該文件中有重復學生信息,請驗明再傳輸\n">;head->next=NULL;}Opinion=Opinion->next;}if<head->next==NULL>{head->next=p;point=p;}else{point->next=p;point=p;}};Opinion=head->next;while<Opinion->next!=NULL>{Opinion=Opinion->next;if<Opinion->next->next==NULL>Opinion->next=NULL;};fclose<fp>;printf<"傳輸成功\n">;}voidStuSelectErg<Student*head>;//學生成績管理系統(tǒng)的遍歷函數(shù),由查找函數(shù)調用voidStuSelectNumFind<Student*head>;//學生成績管理系統(tǒng)的按學號查找函數(shù),由查找函數(shù)調用voidStuSelectSubFind<Student*head>;//學生成績管理系統(tǒng)的按科目查找函數(shù),由查找函數(shù)調用voidStuSelect<Student*head>//學生成績管理系統(tǒng)的查找函數(shù),由主函數(shù)調用{chardecide='y';//定義while變量,函數(shù)是否繼續(xù)進行intnum;//定義switch變量,函數(shù)跳轉到哪個子函數(shù)while<decide!='n'>{printf<"***************************************************\n">;printf<"****1遍歷2學號查找3科目查找4退出****\n">;printf<"***************************************************\n">;scanf<"%d",&num>;switch<num>{case1:StuSelectErg<head>;break;case2:StuSelectNumFind<head>;break;case3:StuSelectSubFind<head>;break;default:decide='n';break;}}}voidStuSelectErg<Student*head>//學生成績管理系統(tǒng)的遍歷函數(shù),由查找函數(shù)調用{Student*p=<Student*>malloc<sizeof<Student>>;p=head->next;inti=1;while<p!=NULL>{printf<"第%d位學生信息:\n",i>;StuOutput<p>;p=p->next;i++;}}voidStuSelectNumFind<Student*head>//學生成績管理系統(tǒng)的查找子系統(tǒng),有查找函數(shù)調用{intnum;printf<"輸入想要查找學生的學生號:\n">;scanf<"%d",&num>;Student*p=<Student*>malloc<sizeof<Student>>;p=head->next;inti=1;while<p!=NULL>{if<num==p->num>{StuOutput<p>;i++;}p=p->next;}if<i==1>printf<"沒有該學生信息">;}voidStuSelectSubFind<Student*head>//學生成績管理系統(tǒng)的按科目查找函數(shù),由查找函數(shù)調用{charSub[10];printf<"輸入想要查找科目:\n">;scanf<"%s",Sub>;Student*p=<Student*>malloc<sizeof<Student>>;p=head->next;inti=1;while<p!=NULL>{if<!strcmp<Sub,p->subject>>{StuOutput<p>;i++;}p=p->next;}if<i==1>printf<"沒有該學生信息">;}voidStuAlter<Student*head>//學生成績管理系統(tǒng)的修改函數(shù),由主函數(shù)調用{intnum;printf<"輸入想要查找學生的學生號:\n">;scanf<"%d",&num>;charSub[10];printf<"輸入想要查找科目:\n">;scanf<"%s",Sub>;Student*p=<Student*>malloc<sizeof<Student>>;p=head->next;inti=1;while<p!=NULL>{if<num==p->num&&!strcmp<Sub,p->subject>>{printf<"輸入修改成績:\n">;scanf<"%d",&p->grade>;printf<"修改成功\n">;i++;}p=p->next;if<i==1>printf<"沒有該學生信息">;}}voidStuInsert<Student*head>//學生成績管理系統(tǒng)的插入函數(shù),由主函數(shù)調用{Student*point=<Student*>malloc<sizeof<Student>>;point=head->next;while<point->next!=NULL>point=point->next;//找到尾結點chardecide='y';//定義while變量,函數(shù)是否繼續(xù)進行intnum;//定義switch變量,函數(shù)跳轉到哪個子函數(shù)while<decide!='n'>{printf<"***************************************************\n">;printf<"****1頭插2尾插3退出****\n">;printf<"***************************************************\n">;scanf<"%d",&num>;Student*p=<Student*>malloc<sizeof<Student>>;switch<num>{case1:StuImport<head,p>;p->next=head->next;head->next=p;printf<"插入成功\n">;break;case2:StuImport<head,p>;point->next=p;p->next=NULL;printf<"插入成功\n">;break;default:decide='n';break;}}}voidStuDelect<Student*head>//學生成績管理系統(tǒng)的刪除函數(shù),由主函數(shù)調用{intnum;printf<"輸入想要刪除學生的學生號:\n">;scanf<"%d",&num>;charSub[10];printf<"輸入想要刪除科目:\n">;scanf<"%s",Sub>;Student*p=<Student*>malloc<sizeof<Student>>;p->next=head->next;inti=1;while<p->next!=NULL>{if<num==p->next->num&&!strcmp<Sub,p->next->subject>>{StuOutput<p->next>;printf<"是否刪除:1/0\n">;scanf<"%d",&i>;if<num==head->next->num&&!strcmp<Sub,head->next->subject>>{head->next=head->next->next;}else{p->next=p->next->next;}i=2;printf<"刪除成功\n">;break;}p=p->next;}if<i==1>printf<"沒有該學生信息\n">;}voidStuSave<Student*head>//學生成績管理系統(tǒng)的存儲函數(shù),由主函數(shù)調用{FILE*fp;charfilename[10];printf<"請輸入存儲文件名〔包括物理地址\n">;scanf<"%s",filename>;Student*p=<Student*>malloc<sizeof<Student>>;p=head->next;if<<fp=fopen<filename,"w">>==NULL>{printf<"cannotopenfile">;return;}printf<"inputdata:/n">;while<p!=NULL>{fwrite<p,sizeof<Student>,1,fp>;/*成塊寫入文件*/p=p->next;}fclose<fp>;}程序模塊及其接口描述voidStuInput<Student*>;//學生成績管理系統(tǒng)的輸入函數(shù),由主函數(shù)調用voidStuSelect<Student*>;//學生成績管理系統(tǒng)的查找函數(shù),由主函數(shù)調用voidStuAlter<Student*>;//學生成績管理系統(tǒng)的修改函數(shù),由主函數(shù)調用voidStuInsert<Student*>;//學生成績管理系統(tǒng)的插入函數(shù),由主函數(shù)調用voidStuDelect<Student*>;//學生成績管理系統(tǒng)的刪除函數(shù),由主函數(shù)調用voidStuSave<Student*>;//學生成績管理系統(tǒng)的存儲函數(shù),由主函數(shù)調用基本操作函數(shù):voidStuOutput<Student*p>;//輸出函數(shù)intStuImport<Student*head,Student*p>;//輸入函數(shù)voidStuInputHand<Student*head>;//學生成績管理系統(tǒng)的手動輸入函數(shù),由輸入函數(shù)調用voidStuInputFile<Student*head>;//學生成績管理系統(tǒng)的文件輸入函數(shù),由輸入函數(shù)調用voidStuSelectErg<Student*head>;//學生成績管理系統(tǒng)的遍歷函數(shù),由查找函數(shù)調用voidStuSelectNumFind<Student*head>;//學生成績管理系統(tǒng)的按學號查找函數(shù),由查找函數(shù)調用voidStuSelectSubFind<Student*head>;//學生成績管理系統(tǒng)的按科目查找函數(shù),由查找函數(shù)調用程序的輸入與輸出描述輸入學生基本信息。輸出學生基本信息調試分析或程序測試由主界面進入學生成績管理界面。手動輸入學生基本信息由學號等基本信息查找學生科目成績修改成績插入新的學生基本信息刪除選擇出來的學生信息儲存剛才的學生信息尚未解決的問題或改進方向未解決的問題:不能同時輸入多科成績,存儲后的文件無法正常查看。改進方向:輸入多科成績。對軟件的使用說明操作較為復雜,需要耐心以及根據界面提示做,不可亂輸入。項目三對設計任務內容的概述編寫函數(shù)實現(xiàn)圖的拓撲排序。需求分析或功能描述。概要設計或程序流程圖開始開始輸入頂點及信息輸入頂點及信息NN輸入符合條件?輸入符合條件?YY根據輸入信息建立鄰接表根據輸入信息建立鄰接表建棧建棧在鄰接表中尋找入度為0的頂點,將其按入棧在鄰接表中尋找入度為0的頂點,將其按入棧彈出棧頂,打印,將與棧頂元素鄰接的頂點的入度減一彈出棧頂,打印,將與棧頂元素鄰接的頂點的入度減一NN棧是否為空棧是否為空YY終止終止。詳細設計或源代碼說明#include<stdio.h>#include<stdlib.h>#definetrue1#definefalse0#defineMAX_VEXTEX_NUM20#defineM20#defineSTACK_INIT_SIZE100#defineSTACKINCREMENT10/*圖的鄰接表存儲結構*/typedefstructArcNode/*弧結點結構類型*/{intadjvex;/*該弧指向的頂點的位置*/structArcNode*nextarc;/*指向下一條弧的指針*/}ArcNode;typedefstructVNode/*鄰接表頭結點類型*/{intdata;/*頂點信息*/ArcNode*firstarc;/*指向第一條依附于該點的弧的指針*/}VNode,AdjList[MAX_VEXTEX_NUM];/*AdjList為鄰接表類型*/typedefstruct{AdjListvertices;intvexnum,arcnum;}ALGraph;/**/voidCreatGraph<ALGraph*G>/*通過用戶交互產生一個圖的鄰接表*/{intm,n,i;ArcNode*p;printf<"=======================================================">;printf<"\n輸入頂點數(shù):">;scanf<"%d",&G->vexnum>;printf<"\n輸入邊數(shù):">;scanf<"%d",&G->arcnum>;printf<"=======================================================">;for<i=1;i<=G->vexnum;i++>/*初始化各頂點*/{G->vertices[i].data=i;/*編寫頂點的位置序號*/G->vertices[i].firstarc=NULL;}for<i=1;i<=G->arcnum;i++>/*記錄圖中由兩點確定的弧*/{printf<"\n輸入確定弧的兩個頂點u,v:">;scanf<"%d%d",&n,&m>;while<n<0||n>G->vexnum||m<0||m>G->vexnum>{printf<"輸入的頂點序號不正確請重新輸入:">;scanf<"%d%d",&n,&m>;}p=<ArcNode*>malloc<sizeof<ArcNode>>;/*開辟新的弧結點來存儲用戶輸入的弧信息*/if<p==NULL>{printf<"ERROR!">;exit<1>;}p->adjvex=m;/*該弧指向位置編號為m的結點*/p->nextarc=G->vertices[n].firstarc;/*下一條弧指向的是依附于n的第一條弧*/G->vertices[n].firstarc=p;}printf<"=======================================================">;printf<"\n建立的鄰接表為:\n">;/*打印生成的鄰接表〔以一定的格式*/for<i=1;i<=G->vexnum;i++>{printf<"%d",G->vertices[i].data>;for<p=G->vertices[i].firstarc;p;p=p->nextarc>printf<"-->%d",p->adjvex>;printf<"\n">;}printf<"=======================================================">;}/**/typedefstruct/*棧的存儲結構*/{int*base;/*棧底指針*/int*top;/*棧頂指針*/intstacksize;}SqStack;/**/voidInitStack<SqStack*S>/*初始化棧*/{S->base=<int*>malloc<STACK_INIT_SIZE*sizeof<int>>;if<!S->base>/*存儲分配失敗*/{printf<"ERROR!">;exit<1>;}S->top=S->base;S->stacksize=STACK_INIT_SIZE;}/**/voidPush<SqStack*S,inte>/*壓入新的元素為棧頂*/{if<S->top-S->base>=S->stacksize>{S->base=<int*>realloc<S->base,<S->stacksize+STACKINCREMENT>*sizeof<int>>;/*追加新空間*/if<!S->base>/*存儲分配失敗*/{printf<"ERROR!">;exit<1>;}S->top=S->base+S->stacksize;S->stacksize+=STACKINCREMENT;}*S->top++=e;/*e作為新的棧頂元素*/}/**/intPop<SqStack*S,int*e>/*彈出棧頂,用e返回*/{if<S->top==S->base>/*棧為空*/{returnfalse;}*e=*--S->top;return0;}/**/intStackEmpty<SqStack*S>/*判斷棧是否為空,為空返回1,不為空返回0*/{if<S->top==S->base>returntrue;elsereturnfalse;}/**/voidFindInDegree<ALGraphG,intindegree[]>/*對各頂點求入度*/{inti;for<i=1;i<=G.vexnum;i++>/*入度賦初值0*/{indegree[i]=0;}for<i=1;i<=G.vexnum;i++>{while<G.vertices[i].firstarc>{indegree[G.vertices[i].firstarc->adjvex]++;/*出度不為零,則該頂點firstarc域指向的弧指向的頂點入度加一*/G.vertices[i].firstarc=G.vertices[i].firstarc->nextarc;}}}/**/voidTopoSort<ALGraphG>{intindegree[M];inti,k,n;intcount=0;/*初始化輸出計數(shù)器*/ArcNode*p;SqStackS;FindInDegree<G,indegree>;InitStack<&S>;for<i=1;i<=G.vexnum;i++>{printf<"\n">;printf<"indegree[%d]=%d\n",i,indegree[i]>;/*輸出入度*/}printf<"\n">;for<i=1;i<=G.vexnum;i++>/*入度為0的入棧*/{if<!indegree[i]>Push<&S,i>;}printf<"=======================================================">;printf<"\n\n拓撲排序序列為:">;
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年廣東省中考模擬歷史試題(原卷版+解析版)
- 當前世界經濟形勢1468792390
- 2025年黨員領導干部廉政法規(guī)知識考試題庫及答案(共130題)
- FAMILYDAY員工家庭日活動
- 醫(yī)藥航空運輸服務協(xié)議
- 氫能項目可行性研究報告
- 項目監(jiān)控工程
- 聰明屋智能家居系統(tǒng)
- 屋頂分布式光伏發(fā)電項目可研報告
- 部門間工作聯(lián)系函及溝通策略指導
- 2025年合肥共達職業(yè)技術學院單招職業(yè)技能測試題庫附答案
- 2025美國急性冠脈綜合征(ACS)患者管理指南解讀課件
- 足球迷互動活動策劃與執(zhí)行策略
- 2025年寧夏工商職業(yè)技術學院單招職業(yè)適應性測試題庫帶答案
- ESC+2024+心房顫動(房顫)管理指南解讀
- 2019地質災害防治工程工程量清單計價規(guī)范
- 2022-2024年江蘇中考英語試題匯編:任務型閱讀填空和閱讀回答問題(教師)
- 游戲跨文化傳播-洞察分析
- 河北石家莊市市屬國有企業(yè)招聘筆試沖刺題2025
- 2025-2030年中國鐵合金冶煉行業(yè)競爭格局展望及投資策略分析報告
-
評論
0/150
提交評論