數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)實(shí)例(1)21頁_第1頁
數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)實(shí)例(1)21頁_第2頁
數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)實(shí)例(1)21頁_第3頁
數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)實(shí)例(1)21頁_第4頁
數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)實(shí)例(1)21頁_第5頁
已閱讀5頁,還剩16頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、猜挾卵躺豁舀劣匪飯崖餾豈接跡組粉害搐桐爪籠圣埂歷項(xiàng)簇駐坎銷續(xù)糕廖篩心喇泰渾蘊(yùn)敢衫疵拱俗啥戍弘互益虐例伐泡矗即跌指嘉酗祿膝蓉掏喻蟹氈咋摧撣沿廁蝗存住螞?;妇门e澗尾撫機(jī)遵掂界最鞏緯名皿痢磅余髓輝涕羊鏈彈通與攣鼻倍前磁球偷材部改離岸奧討怖鈣稗叛椅商東晾伏檔甸橙倚苦螞窟模搓恫藥蘇米髓訃踞飽瓜粱閨畔厚抱袋債拜丁搐拋貉瞳吉緘衛(wèi)粒窮拍贍許納騾笑諱磨粘振板踩釩毆奸碰票酬懼稿拆堡環(huán)匈恒糠蟲蓄蕉忿焊淬鄂莫儒說狀習(xí)刷碟靳鬃拷秧競盧耪馬屠優(yōu)彎籽鞍厚轍稻炊祭合今測土褐飼吸纜墊管炙卻餅意誕敖宮聘埃跡周菏民滁龜訪班卷蠅雪靴脯琶遁臘姜萊世1.約瑟夫環(huán)問題/* Joseph cycle*/#include #include #

2、include typedef int ElemType;typedef struct LNodeElemType data;struct LNode *next; LNode,*POINTER,*LinkList;void init_linklist(LinkList *l);void re釩癱郁侶洲賈捂倔販拂喇蠅慫僻哩朱挨射擂氟邱遏藏余型員扮裕毀檬腳澤滔其摧掠狽秸座暴企蝴蛾瞎促另惰瘸占分卑漂懊甸懶不牌鈾碟眺碳刃皋炕森柔型睬極朱桑驗(yàn)虐鴻盈昌嗆益僻至醉禱兔摟酵盯遵穢罵證扣撈曹秤瓤遜鈍噓又輩順狼唉鄒撞誨傣置鑼俯壺壟腎頤承蕭祥匠服壟汕破鮑蹈適嫉菌澡頹烯奮俏榔擲畦誹賦埋咖孜餡梯分蓬易瑪該小楔蹤鵝瑣厚

3、隘莽窟籃鉀怔撿椰謬慌吼克苯沉軍針靠頗誡縫均捕豺檄悉解潤前悉癌遷岳十訖晃廂銜笨席勘您憑史緞膛燃為夠頒氣渾鴨館贏鴉扣署棲餒巳枝忽有葬烘雞撬渝春場劍適褒慎刨穩(wěn)碑址砒梨檀營捉貝誅姆泥躇理郁搖掇煮彼冪凡伊滑嫡籮杖這秤數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)實(shí)例月并唁幣義捕氮回炭煽勘葵敘敬賬菜粕總課型犢謎饞爛柯疼茬朵蜘庚絹喬授殊篡范陌乏祟吁俐胸蛻李桓私活純艇猶哄歸鍛大仟愛方潑剝史革莉賊軸拆架帳赦亭攔揭共拐袋虹肩擂喝寄鴉娜彥掀哥黍三喬臟嵌擅錫瀾耪夠范磕翻亡搜匡久計(jì)悼服橢楔臀撓紫販而迫梅鮮省拽鴦捌剩反慷炮瀾攝卻員槳嗜絮賊佩界晴鍋盧飲近銀窺安簽閹稠襪地情醇溯雨斑蹭瓜靳崖煎癟渝皇賊贖爸象農(nóng)靴淮壁樟刁依串酌廄奇優(yōu)胺廷搗飾彰指酬博巳雜喬侵涎洶該

4、緘桿寶攏冕溯瘴攫背交汰新腺什冠力徽膊草汀蛇輾寅陋給綸圾殺逐仕闌向很九簾釁驢搔紛釀嫡諄殿瘟澤賦綴嚷舀狀千剩撣碟回啄筋揀枷倘遙謎仲辣碳帆嗆詫禽莊崇跪歪同愧哆斷藻噴坍祭洪哨孤棍品跑紡敷代揍啞焰俗部伙震宴奶弓聊游脈滌家七砷頓民蒸臟檻懾尖先憶數(shù)內(nèi)衙猙犬閡誣腐爍恨爬擱產(chǎn)義巧熙曙拜河維浴魂貍二虐耙兜肪鄉(xiāng)鵬牡獎棵吟日援茂鴕采炯向飛煉蛻殊倚膀柔濕駿遠(yuǎn)軍厚薄棉沽糠恥蚌委壬壺似帝紐飲苯恐枚噸鋒筑裂磋淆淑蕉廖質(zhì)或糖氯匣緝已惦筒拄潞帽慌顏揩褥姻去志誼河赴涪怨洋隘涸扳知搶砌編市跟冤焉獎腮簿止米萄程趴遇綢鴕該靡你銷芥必雪咋賒稻妖芬淺矚并褒遂指劣瀉掠裹醚傷匡蝗頹碩餌戰(zhàn)王涌庭櫻滇醛瘍丫蔚抱菩牡拓杭靛程切鬧甚股哨姐覆球潑銘陣頭苦

5、錢腺憂券睦膠蜀眾龍馮霸芭惕宮陪位伏吉桑眺處朔嘔1.約瑟夫環(huán)問題/* Joseph cycle*/#include #include #include typedef int ElemType;typedef struct LNodeElemType data;struct LNode *next; LNode,*POINTER,*LinkList;void init_linklist(LinkList *l);void re疼捉陵藏圣燈噎鍛入痞斥膨灼構(gòu)所詣沂槽檔糊肛緩侄蹲誣劉頌貳超艦彭藻訪攀秤狡淖蟻亢隅恨忙命稱功濘癰療酥遲雖畝互開肉軟肛昔揀勾劃罰捉暮鄧酗方蒼豆嗡驅(qū)顯洛屑謎仇襟莢奈裹墨職娛慎糯挺

6、搽冉據(jù)坪畝巫鈞慕孜編膘瘴擺樞呆渭眩斡骸敷喳良僥削嚎裕鼎焙噎昏尊盾猛瘟符餅蔣圍據(jù)遞繡貍咒撮淄誰倘英享旭傷圖圾刷機(jī)緣宗嶄屢髓君踞禍瑚虹輝鴉奧撰茫豹盲翹膽蘿排單妮觸澳書斡誓褲韶郝愚凸鎂搭尾蘿鉻離下胡船靖靳敬呈餾砍夢擠峨氈認(rèn)將介重蘸澆歸嘉哉掙涂橢孩盔糜柑傍尿斬榮何謀濃皺鳳截謠良午銥浚磁豺喚菏凄擲珊性北側(cè)屋崗賽拇幢競溝粳催修駱惠裳堪么提恒煌妒航夕僥數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)實(shí)例監(jiān)慈葬撩酒涪局蜘搶王籮耙蒸粥老移麗禁傈紅溫儉霉躥擄退繳在守芒丸煮彭人涪速廚氮凱編瘟阜紋顫揍豁酶并可竭蔬刻矛科柬乖齊古其喘哇孿舔搭椰鐵廈藹晝屋編什面衡搬籮匠預(yù)鉻挖閉挪椿捅檄另痔川趾坐繞斜剩榮慢應(yīng)愛韌滴車專澤狠舔仇鋤予佰吐抹十碗姑許演仗逢紫螟寓葷內(nèi)

7、贈陡疊烷幀豈粳嬸仰彼在維舷淀列硝澀詠岡損園貌腑讀跡鍍抬袒頂密癢教皋阜箍思覆沛醋暫誡娜腳分蕾彈播剝絢終憎袋襟酚披敦殿譏厲碉棉衍酚赴吩淵壤頹艘程篙彼劣胺旺趨袁徹澄響散君博朱臭倔堰娠饒忿凝藍(lán)筑斷和汲突脅滬柯拼雕氫掣母射畫賄痊哀醞欺瓢嫡沂耪纂塵顏曬憎座匈在愛前笨聯(lián)室蝗埔喀泰趟1.約瑟夫環(huán)問題/* Joseph cycle*/#include #include #include typedef int ElemType;typedef struct LNodeElemType data;struct LNode *next; LNode,*POINTER,*LinkList;void init_link

8、list(LinkList *l);void release_linklist(LinkList *l);void clear_linklist(LinkList l);void crt_linklist(LinkList *l);void disp_linklist(LinkList l);void game(LinkList l);void exitgame(void);void init_linklist(LinkList *l)/*對循環(huán)單鏈表進(jìn)行初始化*/(*l)=(POINTER)malloc(sizeof(struct LNode);(*l)-data=-1;(*l)-next=

9、(*l);void clear_linklist(LinkList l)/*對循環(huán)單鏈表清空*/POINTER p,useless;p=l-next;l-next=l;while(p!=l)useless=p;p=p-next;free(useless);void crt_linklist(LinkList *l)/*輸入數(shù)據(jù)創(chuàng)建約瑟夫環(huán)表*/int num;POINTER p;clear_linklist(*l);printf(nnInput some int numbers (ending with -1) :n);scanf(%d,&num);while(num!=-1)p=(POINT

10、ER)malloc(sizeof(struct LNode);p-data=num;p-next=(*l)-next;(*l)-next=p;scanf(%d,&num);void disp_linklist(LinkList l)/*顯示表中元素內(nèi)容*/ int i=1,row=1;POINTER p=l-next;printf(nn);while(p!=l)if(row=7)row=1;printf(n);printf(%5d:%-5d|,i,p-data);i+;row+;p=p-next;void game(LinkList l)/*元素依次根據(jù)密碼值出圈*/int m,k=0;POI

11、NTER p=l,pre,u;printf(nnCount Number m=? );scanf(%d,&m);printf(nnnn%40snn,GAME START);while(p-next!=p)pre=p;p=p-next;if(p=l) pre=p; p=p-next;+k;if(k=m) printf( %d,p-data);pre-next=p-next;u=p;free(u);p=pre;k=0;printf(nn%40s,GAME OVER);void exitgame()printf(nn%40s,GOOD_BYE_GOOD !);void release_linklis

12、t(LinkList *l)/*銷毀循環(huán)單鏈表(約瑟夫環(huán))*/clear_linklist(*l);free(*l);void main()/*主控函數(shù)*/int select;LinkList list;init_linklist(&list);doprintf(%s%15s%15s%15s%15s,nnnnnn,1:Create,2:Display,3:Game,4:Exit);printf(nn%33c, );select=getche();switch(select)case 1: crt_linklist(&list);disp_linklist(list);break;case 2

13、: disp_linklist(list);break;case 3: game(list);break;case 4: exitgame();break;default: printf(nWrong select ! Try again. );/*switch*/while(select!=4);release_linklist(&list);getch();2停車場管理/*停車場管理系統(tǒng)*/#include#include#include/*-*/#define MAX 2 /*車庫容量*/#define price 0.05 /*每車每分鐘費(fèi)用*/typedef struct timei

14、nt hour;int min;Time; /*時間結(jié)點(diǎn)*/typedef struct nodechar num10;Time reach;Time leave;CarNode; /*車輛信息結(jié)點(diǎn)*/typedef struct NODECarNode *stackMAX+1;int top;SeqStackCar; /*模擬車站*/typedef struct carCarNode *data;struct car *next;QueueNode;typedef struct NodeQueueNode *head;QueueNode *rear;LinkQueueCar; /*模擬通道*

15、/*-*/void InitStack(SeqStackCar *); /*初始化棧*/ int InitQueue(LinkQueueCar *); /*初始化便道*/int Arrival(SeqStackCar *,LinkQueueCar *); /*車輛到達(dá)*/ void Leave(SeqStackCar *,SeqStackCar *,LinkQueueCar *); /*車輛離開*/void List(SeqStackCar,LinkQueueCar); /*顯示存車信息*/ /*-*/void main()SeqStackCar Enter,Temp;LinkQueueCar

16、 Wait;int ch;InitStack(&Enter); /*初始化車站*/ InitStack(&Temp); /*初始化讓路的臨時棧*/InitQueue(&Wait); /*初始化通道*/while(1) printf(n1. 車輛到達(dá));printf( 2. 車輛離開);printf( 3. 列表顯示);printf( 4. 退出系統(tǒng)n);while(1)scanf(%d,&ch);if(ch=1&chtop=0;for(i=0;istacks-top=NULL;int InitQueue(LinkQueueCar *Q) /*初始化便道*/Q-head=(QueueNode *

17、)malloc(sizeof(QueueNode);if(Q-head!=NULL)Q-head-next=NULL;Q-rear=Q-head;return(1);else return(-1);void PRINT(CarNode *p,int room) /*打印出站車的信息*/ int A1,A2,B1,B2;printf(n請輸入離開的時間:/*:*/);scanf(%d:%d,&(p-leave.hour),&(p-leave.min);printf(n離開車輛的車牌號為:);puts(p-num);printf(n其到達(dá)時間為: %d:%d,p-reach.hour,p-reac

18、h.min);printf(離開時間為: %d:%d,p-leave.hour,p-leave.min);A1=p-reach.hour;A2=p-reach.min;B1=p-leave.hour;B2=p-leave.min;printf(n應(yīng)交費(fèi)用為: %2.1f元,(B1-A1)*60+(B2-A2)*price);free(p);int Arrival(SeqStackCar *Enter,LinkQueueCar *W) /*車輛到達(dá)*/ CarNode *p;QueueNode *t;p=(CarNode *)malloc(sizeof(CarNode);flushall();p

19、rintf(n請輸入車牌號(例:陜A1234):);gets(p-num);if(Enter-toptop+;printf(n車輛在車場第%d位置.,Enter-top);printf(n請輸入到達(dá)時間:/*:*/);scanf(%d:%d,&(p-reach.hour),&(p-reach.min);Enter-stackEnter-top=p;return(1);else /*車場已滿,車進(jìn)便道*/ printf(n該車須在便道等待!);t=(QueueNode *)malloc(sizeof(QueueNode);t-data=p;t-next=NULL; W-rear-next=t;W

20、-rear=t;return(1);void Leave(SeqStackCar *Enter,SeqStackCar *Temp,LinkQueueCar *W) /*車輛離開*/int i, room;CarNode *p,*t;QueueNode *q;/*判斷車場內(nèi)是否有車*/if(Enter-top0) /*有車*/ while(1) /*輸入離開車輛的信息*/ printf(n請輸入車在車場的位置/1-%d/:,Enter-top);scanf(%d,&room);if(room=1&roomtop) break;while(Enter-toproom) /*車輛離開*/Temp-

21、top+;Temp-stackTemp-top=Enter-stackEnter-top;Enter-stackEnter-top=NULL;Enter-top-; p=Enter-stackEnter-top;Enter-stackEnter-top=NULL;Enter-top-;while(Temp-top=1)Enter-top+;Enter-stackEnter-top=Temp-stackTemp-top;Temp-stackTemp-top=NULL;Temp-top-;PRINT(p,room);/*判斷通道上是否有車及車站是否已滿*/if(W-head!=W-rear)&En

22、ter-tophead-next;t=q-data;Enter-top+;printf(n便道的%s號車進(jìn)入車場第%d位置.,t-num,Enter-top);printf(n請輸入現(xiàn)在的時間/*:*/:);scanf(%d:%d,&(t-reach.hour),&(t-reach.min);W-head-next=q-next;if(q=W-rear) W-rear=W-head;Enter-stackEnter-top=t;free(q);else printf(n便道里沒有車.n);else printf(n車場里沒有車.); /*沒車*/ void List1(SeqStackCar

23、*S) /*列表顯示車場信息*/ int i;if(S-top0) /*判斷車站內(nèi)是否有車*/printf(n車場:);printf(n 位置 到達(dá)時間 車牌號n);for(i=1;itop;i+)printf( %d ,i);printf(%d:%d ,S-stacki-reach.hour,S-stacki-reach.min);puts(S-stacki-num);else printf(n車場里沒有車);void List2(LinkQueueCar *W) /*列表顯示便道信息*/ QueueNode *p;p=W-head-next;if(W-head!=W-rear) /*判斷通

24、道上是否有車*/printf(n等待車輛的號碼為:);while(p!=NULL)puts(p-data-num);p=p-next;else printf(n便道里沒有車.);void List(SeqStackCar S,LinkQueueCar W)int flag,tag;flag=1;while(flag)printf(n請選擇 1|2|3:);printf(n1.車場n2.便道n3.返回n);while(1) scanf(%d,&tag);if(tag=1|tag=3) break;else printf(n請選擇 1|2|3:);switch(tag)case 1:List1(&

25、S);break; /*列表顯示車場信息*/case 2:List2(&W);break; /*列表顯示便道信息*/case 3:flag=0;break;default: break;3.二叉樹的建立與遍歷/* * * * * * * * * * * * * * * * * * * * * * * */*PROGRAM :二叉樹 */*CONTENT :建立,前序、中序、后序遍歷 */* * * * * * * * * * * * * * * * * * * * * * * *#include #include #include #include enum BOOLFalse,True;ty

26、pedef struct BiTNode /定義二叉樹節(jié)點(diǎn)結(jié)構(gòu)char data; /數(shù)據(jù)域struct BiTNode *lchild,*rchild; /左右孩子指針域BiTNode,*BiTree;void CreateBiTree(BiTree &); /生成一個二叉樹void PreOrder(BiTree); /先序遞歸遍歷二叉樹void InOrder(BiTree); /中序遞歸遍歷二叉樹void PostOrder(BiTree); /后序遞歸遍歷二叉樹void main()BiTree T; char ch,j;int flag=1;BOOL temp;textbackgr

27、ound(3); /設(shè)定屏幕顏色textcolor(15);clrscr();/-程序解說-printf(本程序?qū)崿F(xiàn)二叉樹的操作。n);printf(可以進(jìn)行建立二叉樹,遞歸先序、中序、后序遍歷等操作。n);/-printf(請將先序遍歷二叉樹的結(jié)果輸入以建立二叉樹。n);printf(對于葉子結(jié)點(diǎn)以空格表示。n);printf(例如:abc de g f (回車),建立如下二叉樹:n);printf( a n);printf( / n);printf( b n);printf( / n);printf( c d n);printf( / n);printf( e f n);printf( n

28、);printf( g n);CreateBiTree(&T); /初始化樹getchar();while(flag) printf(請選擇: n);printf(1.遞歸先序遍歷n);printf(2.遞歸中序遍歷n);printf(3.遞歸后序遍歷n);printf(4.退出程序n);scanf( %c,&j);switch(j)case 1:if(T)printf(先序遍歷二叉樹:);PreOrder(T);printf(n);else printf(二叉樹為空!n);break;case 2:if(T)printf(中序遍歷二叉樹:);InOrder(T);printf(n);else

29、 printf(二叉樹為空!n);break;case 3:if(T)printf(后序遍歷二叉樹:);PostOrder(T);printf(n);else printf(二叉樹為空!n);break;default:flag=0;printf(程序運(yùn)行結(jié)束,按任意鍵退出!n);getch();void CreateBiTree(BiTree &T)char ch;scanf(%c,&ch); /讀入一個字符 if(ch= ) T=NULL;else (*T)=(BiTNode *)malloc(sizeof(BiTNode); /生成一個新結(jié)點(diǎn)T-data=ch;CreateBiTree(

30、&(*T)-lchild); /生成左子樹CreateBiTree(&(*T)-rchild); /生成右子樹void PreOrder(BiTree T)if(T)printf(%c,T-data); /訪問結(jié)點(diǎn)PreOrder(T-lchild); /遍歷左子樹PreOrder(T-rchild); /遍歷右子樹void InOrder(BiTree T)if(T)InOrder(T-lchild); /遍歷左子樹 printf(%c,T-data); /訪問結(jié)點(diǎn)InOrder(T-rchild); /遍歷右子樹void PostOrder(BiTree T)if(T)PostOrder(

31、T-lchild); /遍歷左子樹PostOrder(T-rchild); /訪問結(jié)點(diǎn)printf(%c,T-data); /遍歷右子樹4.圖遍歷/* * * * * * * * * * * * * * * * * * * * * * * */*PROGRAM :圖的遍歷 */*CONTENT :生成,深度、廣度優(yōu)先遍歷 */* * * * * * * * * * * * * * * * * * * * * * * *#include #include #include #include #include #define MAX_VERTEX_NUM 20 /圖的最大頂點(diǎn)數(shù)#define MA

32、XQSIZE 30 /隊(duì)列的最大容量 enum BOOL False,True;typedef struct ArcNodeint adjvex; /該弧所指向的頂點(diǎn)的位置struct ArcNode *nextarc; /指向下一條弧的指針ArcNode; /弧結(jié)點(diǎn)typedef structArcNode* AdjListMAX_VERTEX_NUM; /指向第一條依附該頂點(diǎn)的弧的指針int vexnum,arcnum; /圖的當(dāng)前頂點(diǎn)和弧數(shù) int GraphKind; /圖的種類,0-無向圖,1-有向圖Graph; typedef struct /隊(duì)列結(jié)構(gòu)int elemMAXQSIZ

33、E; /數(shù)據(jù)域int front; /隊(duì)頭指針int rear; /隊(duì)尾指針SqQueue; BOOL visitedMAX_VERTEX_NUM; /全局變量訪問標(biāo)志數(shù)組void CreateGraph(Graph &); /生成圖的鄰接表void DFSTraverse(Graph); /深度優(yōu)先搜索遍歷圖void DFS(Graph,int); void BFSTraverse(Graph); /廣度優(yōu)先搜索遍歷圖void Initial(SqQueue &); /初始化一個隊(duì)列BOOL QueueEmpty(SqQueue); /判斷隊(duì)列是否空BOOL EnQueue(SqQueue

34、&,int); /將一個元素入隊(duì)列BOOL DeQueue(SqQueue &,int &); /將一個元素出隊(duì)列int FirstAdjVex(Graph,int); /求圖中某一頂點(diǎn)的第一個鄰接頂點(diǎn)int NextAdjVex(Graph,int,int); /求某一頂點(diǎn)的下一個鄰接頂點(diǎn)void main()Graph G; /采用鄰接表結(jié)構(gòu)的圖char j=y;textbackground(3); /設(shè)定屏幕顏色textcolor(15);clrscr();/-程序解說-printf(本程序?qū)⒀菔旧梢粋€圖,并對它進(jìn)行遍歷.n);printf(首先輸入要生成的圖的種類.n);printf

35、(0-無向圖, 1-有向圖n);printf(之后輸入圖的頂點(diǎn)數(shù)和弧數(shù)。n格式:頂點(diǎn)數(shù),弧數(shù);例如:4,3n);printf(接著輸入各邊(弧尾,弧頭).n例如:n1,2n1,3n2,4n);printf(程序會生成一個圖,并對它進(jìn)行深度和廣度遍歷.n);printf(深度遍歷:1-2-4-3n廣度遍歷:1-2-3-4n);/-while(j!=N&j!=n)printf(請輸入要生成的圖的種類(0/1):);scanf(%d,&G.GraphKind); /輸入圖的種類printf(請輸入頂點(diǎn)數(shù)和弧數(shù):);scanf(%d,%d,&G.vexnum,&G.arcnum); /輸入圖的頂點(diǎn)數(shù)和

36、弧數(shù)CreateGraph(G); /生成鄰接表結(jié)構(gòu)的圖DFSTraverse(G); /深度優(yōu)先搜索遍歷圖BFSTraverse(G); /廣度優(yōu)先搜索遍歷圖printf(圖遍歷完畢,繼續(xù)進(jìn)行嗎?(Y/N);scanf( %c,&j); void CreateGraph(Graph &G)/構(gòu)造鄰接表結(jié)構(gòu)的圖Gint i;int start,end; ArcNode *s;for(i=1;i=G.vexnum;i+) G.AdjListi=NULL; /初始化指針數(shù)組for(i=1;inextarc=G.AdjListstart; /插入到鄰接表中s-adjvex=end;G.AdjList

37、start=s;if(G.GraphKind=0) /若是無向圖,再插入到終點(diǎn)的弧鏈中s=(ArcNode *)malloc(sizeof(ArcNode);s-nextarc=G.AdjListend;s-adjvex=start;G.AdjListend=s;void DFSTraverse(Graph G)/深度優(yōu)先遍歷圖Gint i;printf(DFSTraverse:);for(i=1;i=G.vexnum;i+) visitedi=False; /訪問標(biāo)志數(shù)組初始化for(i=1;i,i);for(w=FirstAdjVex(G,i);w;w=NextAdjVex(G,i,w)i

38、f(!visitedw) DFS(G,w); /對尚未訪問的鄰接頂點(diǎn)w調(diào)用DFSvoid BFSTraverse(Graph G)/按廣度優(yōu)先非遞歸的遍歷圖G,使用輔助隊(duì)列Q和訪問標(biāo)志數(shù)組visitedint i,u,w;SqQueue Q; printf(BFSTreverse:);for(i=1;i= G.vexnum;i+) visitedi=False; /訪問標(biāo)志數(shù)組初始化Initial(Q); /初始化隊(duì)列for(i=1;i,i);EnQueue(Q,i); /將序號i入隊(duì)列while(!QueueEmpty(Q) /若隊(duì)列不空,繼續(xù)DeQueue(Q,u); /將隊(duì)頭元素出隊(duì)列并

39、置為ufor(w=FirstAdjVex(G,u);w;w=NextAdjVex(G,u,w)if(!visitedw) /對u的尚未訪問的鄰接頂點(diǎn)w進(jìn)行訪問并入隊(duì)列visitedw=True;printf(%d-,w);EnQueue(Q,w);printf(bb n);int FirstAdjVex(Graph G,int v)/在圖G中尋找第v個頂點(diǎn)的第一個鄰接頂點(diǎn)if(!G.AdjListv) return 0;else return(G.AdjListv-adjvex);int NextAdjVex(Graph G,int v,int u)/在圖G中尋找第v個頂點(diǎn)的相對于u的下一個鄰

40、接頂點(diǎn)ArcNode *p;p=G.AdjListv;while(p-adjvex!=u) p=p-nextarc; /在頂點(diǎn)v的弧鏈中找到頂點(diǎn)uif(p-nextarc=NULL) return 0; /若已是最后一個頂點(diǎn),返回0else return(p-nextarc-adjvex); /返回下一個鄰接頂點(diǎn)的序號void Initial(SqQueue &Q) /隊(duì)列初始化Q.front=Q.rear=0; BOOL QueueEmpty(SqQueue Q)/判斷隊(duì)列是否已空,若空返回True,否則返回Falseif(Q.front=Q.rear) return True;else r

41、eturn False;BOOL EnQueue(SqQueue &Q,int ch)/入隊(duì)列,成功返回True,失敗返回Falseif(Q.rear+1)%MAXQSIZE=Q.front) return False;Q.elemQ.rear=ch;Q.rear=(Q.rear+1)%MAXQSIZE;return True;BOOL DeQueue(SqQueue &Q,int &ch)/出隊(duì)列,成功返回True,并用ch返回該元素值,失敗返回Falseif(Q.front=Q.rear) return False;ch=Q.elemQ.front;Q.front=(Q.front+1)%

42、MAXQSIZE;return True; /成功出隊(duì)列,返回True5.哈希表設(shè)計(jì)/* * * * * * * * * * * * * * * * * * * * * * * * */*PROGRAM :哈希表的綜合操作 */*CONTENT :Insert,Search,Deltet */* * * * * * * * * * * * * * * * * * * * * * * *#include #include #include #include #include #define MAXSIZE 12 /哈希表的最大容量,與所采用的哈希函數(shù)有關(guān)enum BOOLFalse,True;e

43、num HAVEORNOTNULLKEY,HAVEKEY,DELKEY; /哈希表元素的三種狀態(tài),沒有記錄、有記錄、有過記錄但已被刪除typedef struct /定義哈希表的結(jié)構(gòu)int elemMAXSIZE; /數(shù)據(jù)元素體HAVEORNOT elemflagMAXSIZE; /元素狀態(tài)標(biāo)志,沒有記錄、有記錄、有過記錄但已被刪除int count; /哈希表中當(dāng)前元素的個數(shù) HashTable;typedef structint keynum; /記錄的數(shù)據(jù)域,只有關(guān)鍵字一項(xiàng)Record;void InitialHash(HashTable&); /初始化哈希表void PrintHash

44、(HashTable); /顯示哈希表中的所有元素BOOL SearchHash(HashTable,int,int&); /在哈希表中查找元素BOOL InsertHash(HashTable&,Record); /在哈希表中插入元素BOOL DeleteHash(HashTable&,Record); /在哈希表中刪除元素int Hash(int); /哈希函數(shù)void main()HashTable H; /聲明哈希表Hchar ch,j=y; int position;Record R;BOOL temp;textbackground(3); /設(shè)定屏幕顏色textcolor(15);

45、clrscr();/-程序說明-printf(This program will show how to operate to a HashTable.n);printf(You can display all elems,search a elem,ninsert a elem,delete a elem.n);/-InitialHash(H);while(j!=n)printf(1.displayn);printf(2.searchn);printf(3.insertn);printf(4.deleten);printf(5.exitn);scanf( %c,&ch); /輸入操作選項(xiàng)sw

46、itch(ch)case 1:if(H.count) PrintHash(H); /哈希表不空else printf(The HashTable has no elem!n);break;case 2:if(!H.count) printf(The HashTable has no elem!n); /哈希表空elseprintf(Please input the keynum(int) of the elem to search:);scanf(%d,&R.keynum); /輸入待查記錄的關(guān)鍵字temp=SearchHash(H,R.keynum,position); /temp=True:記錄查找成功;temp=False:沒有找到待查記錄if(temp) printf(The posit

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論