版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
1、數(shù)據(jù)結(jié)構(gòu)實驗指導及報告書丄學年第學期姓 名:學 號:班 級:指導教師:數(shù)學與統(tǒng)計學院2011預備實驗 C 語言的函數(shù)數(shù)組指針結(jié)構(gòu)體知識一、實驗目的1、復習C語言中函數(shù)、數(shù)組、指針、結(jié)構(gòu)體與共用體等的概念。2、熟悉利用 C 語言進行程序設(shè)計的一般方法。二、實驗預習說明以下C語言中的概念1 、 函數(shù):2、數(shù)組:3、指針:4、結(jié)構(gòu)體5、共用體三、實驗內(nèi)容和要求1 、調(diào)試程序:輸出 100 以內(nèi)所有的素數(shù)(用函數(shù)實現(xiàn)) 。 #includeint isprime(int n)/*判斷一個數(shù)是否為素數(shù) */int m;for(m=2;m*m=n;m+)if(n%m=0) return 0;return
2、1;int main()/*輸出 100 以內(nèi)所有素數(shù) */int i; printf(n);for(i=2;i100;i+)if(isprime(i)=1) printf(%4d,i);return 0;運行結(jié)果:2、 調(diào)試程序:對一維數(shù)組中的元素進行逆序排列。#include#define N 10int main()int aN=0,1,2,3,4,5,6,7,8,9,i,temp;printf(nthe original Array is:n ); for(i=0;iN;i+)printf(%4d,ai);for(i=0;iN/2;i+) /* 交換數(shù)組元素使之逆序 */ temp=a
3、i;ai=aN-i-1; aN-i-1=temp;printf(nthe changed Array is:n); for(i=0;iN;i+)printf(%4d,ai); return 0;運行結(jié)果:把鞍點3、調(diào)試程序:在二維數(shù)組中,若某一位置上的元素在該行中最大,而在該列中最小,則該 元素即為該二維數(shù)組的一個鞍點。 要求從鍵盤上輸入一個二維數(shù)組, 當鞍點存在時, 找出來。#include#define M 3#define N 4int main()int aMN,i,j,k;printf(n 請輸入二維數(shù)組的數(shù)據(jù): n); for(i=0;iM;i+)for(j=0;jN;j+) sc
4、anf(%d,&aij);for(i=0;iM;i+) /* 輸出矩陣 */ for(j=0;jN;j+)printf(%4d,aij); printf(n); for(i=0;iM;i+) k=0; for(j=1;jaik) k=j;for(j=0;jM;j+) /* 判斷第 i 行的最大值是否為該列的最小值 */ if(ajkaik)break;if(j=M) /* 在第 i 行找到鞍點 */ printf(%d,%d,%dn,aik,i,k);return 0;運行結(jié)果:4、調(diào)試程序:利用指針輸出二維數(shù)組的元素。#includeint main()int a34=1,3,5,7,9,1
5、1,13,15,17,19,21,23;int *p;for(p=a0;pa0+12;p+) if(p-a0)%4=0) printf(n); printf(%4d,*p);return 0;運行結(jié)果:5、調(diào)試程序:設(shè)有一個教師與學生通用的表格,教師的數(shù)據(jù)有姓名、年齡、職業(yè)、教研室 四項,學生有姓名、年齡、專業(yè)、班級四項,編程輸入人員的數(shù)據(jù),再以表格輸出。#include #define N 10struct student char name8; int age; char job;/* 姓名 */* 年齡 */* 職業(yè)或?qū)I(yè),用s或t表示學生或教師*/union int class;/*
6、班級 */char office10; /* depa;stuN;int main()int i; int n;printf( “ n 請輸入人員數(shù) scanf( “%d” ,&n); for(i=0;in;i+)教研室 */” n”);/* 輸入 n 個人員的信息 */printf(n請輸入第 d人員的信息:(name age job class/office)n,i+1);scanf(%s,%d,%c,, &stui.age, &stui.job); if(stui.job=s )scanf(%d,&stui.depa.class);elsescanf(%s,stui.d
7、epa.office);printf( “ name age for(i=0;in;i+) if(stui.job= printf(%s stui.depa.class);elseprintf(%sjob class/office” );/* 輸出 */ s)%3d %3c %dn,,%3d %3c %sn,,stui.age,stui.age,stui.job,stui.job,stui.depa.office);輸入的數(shù)據(jù): 2Wang 19 s 99061 Li 36 t computer 運行結(jié)果:四、實驗小結(jié)五、教師評語實驗一順序表與鏈表、實驗目的
8、1、掌握線性表中元素的前驅(qū)、后續(xù)的概念。2、掌握順序表與鏈表的建立、插入元素、刪除表中某元素的算法。3、對線性表相應算法的時間復雜度進行分析。4、理解順序表、鏈表數(shù)據(jù)結(jié)構(gòu)的特點(優(yōu)缺點) 。二、實驗預習說明以下概念1、線性表:2、順序表:3、鏈表:、實驗內(nèi)容和要求1、閱讀下面程序,在橫線處填寫函數(shù)的基本功能。并運行程序,寫出結(jié)果。#in clude#in clude#defi ne ERROR 0#defi ne OK 1#defi ne INIT_SIZE 5/*#defi ne INCREM 5/*typedef int ElemType; /* typedef struct Sqlist
9、ElemType *slist; /* int len gth;/*int listsize; /*Sqlist;初始分配的順序表長度*/ 溢出時,順序表長度的增量*/定義表元素的類型*/存儲空間的基地址*/順序表的當前長度*/當前分配的存儲空間*/int InitList_sq(Sqlist *L); /*/int CreateList_sq(Sqlist *L,int n); /*/int ListInsert_sq(Sqlist *L,int i,ElemType e);/*/ int Prin tList_sq(Sqlist *L); /*int ListDelete_sq(Sqlis
10、t *L,int i); /*int ListLocate(Sqlist *L,ElemType e); /*輸出順序表的元素*/刪除第i個元素*/查找值為e的元素*/int In itList_sq(Sqlist *L)L-slist=(ElemType*)malloc(INIT_SIZE*sizeof(ElemType);if(!L-slist) return ERROR;L-length=0;L-listsize=INIT_SIZE;return OK;/*InitList*/int CreateList_sq(Sqlist *L,int n)ElemType e;int i;for(i
11、=0;in;i+) printf(input data %d,i+1); scanf(%d,&e); if(!ListInsert_sq(L,i+1,e) return ERROR;return OK;/*CreateList*/* 輸出順序表中的元素 */int PrintList_sq(Sqlist *L)int i;for(i=1;ilength;i+) printf(%5d,L-slisti-1);return OK;/*PrintList*/int ListInsert_sq(Sqlist *L,int i,ElemType e)int k; if(iL-length+1) retu
12、rn ERROR;if(L-length=L-listsize)L-slist=(ElemType*)realloc(L-slist, (INIT_SIZE+INCREM)*sizeof(ElemType); if(!L-slist)return ERROR; L-listsize+=INCREM;for(k=L-length-1;k=i-1;k-) L-slistk+1= L-slistk;L-slisti-1=e;L-length+;return OK;/*ListInsert*/* 在順序表中刪除第 i 個元素 */ int ListDelete_sq(Sqlist *L,int i)/
13、* 在順序表中查找指定值元素,返回其序號 */int ListLocate(Sqlist *L,ElemType e)int main()Sqlist sl;int n,m,k;printf(please input n:); /* 輸入順序表的元素個數(shù) */ scanf(%d,&n);if(n0)printf(n1-Create Sqlist:n);InitList_sq(&sl);CreateList_sq(&sl,n); printf(n2-Print Sqlist:n);PrintList_sq(&sl);printf(nplease input insert location and
14、 data:(location,data)n); scanf(%d,%d,&m,&k);ListInsert_sq(&sl,m,k); printf(n3-Print Sqlist:n);PrintList_sq(&sl); printf(n);elseprintf(ERROR);return 0;運行結(jié)果2、為第 1 題補充刪除和查找功能函數(shù),并在主函數(shù)中補充代碼驗證算法的正確性。 刪除算法代碼:運行結(jié)果算法分析查找算法代碼:運行結(jié)果算法分析3、閱讀下面程序,在橫線處填寫函數(shù)的基本功能。并運行程序,寫出結(jié)果。#in clude#in clude#defi ne ERROR 0定義表元素的類型
15、*/ 線性表的單鏈表存儲*/#defi ne OK 1typedef int ElemType; /* typedef struct LNode /*ElemType data; struct LNode *n ext;LNode,*Li nkList;LinkList CreateList(int n); /* void PrintList(LinkList L); /*/輸出帶頭結(jié)點單鏈表的所有元素*/int GetElem(LinkList L,int i,ElemType *e); /*/ LinkList CreateList(int n)LNode *p,*q,*head;int
16、i;head=(L in kList)malloc(sizeof(LNode); p=head;for(i=0;idata);/*q- next=NULL;/*p_n ext=q;/*p=q;retur n head;/*CreateList*/void Prin tList(L in kList L)LNode *p;p=L- next; /*p 指向單鏈表的第 while(p!=NULL)prin tf(%5d,p-data);head- next=NULL;prin tf(i nput data %i:,i+1);輸入元素值*/結(jié)點指針域置空*/ 新結(jié)點連在表末尾*/1個元素*/p=p-
17、n ext;/*Pri ntList*/int GetElem(LinkList L,int i,ElemType *e)LNode *p;int j=1;p=L-n ext;while(p&jn ext;j+;if(!p|ji)return ERROR;*e=p-data;return OK;/*GetElem*/int main()int n,i;ElemType e;LinkList L=NULL; /*定義指向單鏈表的指針 */printf(please input n:); /*輸入單鏈表的元素個數(shù) */scanf(%d,&n);if(n0)printf(n1-Create Link
18、List:n);L=CreateList(n);printf(n2-Print LinkList:n);PrintList(L);printf(n3-GetElem from LinkList:n); printf(input i=);scanf(%d,&i); if(GetElem(L,i,&e)printf(No%i is %d,i,e);elseprintf(not exists);elseprintf(ERROR);return 0;運行結(jié)果算法分析4、為第 3 題補充插入功能函數(shù)和刪除功能函數(shù)。 并在主函數(shù)中補充代碼驗證算法的正確性。 插入算法代碼:運行結(jié)果算法分析刪除算法代碼:運行
19、結(jié)果算法分析以下為選做實驗:5、循環(huán)鏈表的應用(約瑟夫回環(huán)問題)n 個數(shù)據(jù)元素構(gòu)成一個環(huán),從環(huán)中任意位置開始計數(shù),計到m 將該元素從表中取出,重復上述過程,直至表中只剩下一個元素。提示:用一個無頭結(jié)點的循環(huán)單鏈表來實現(xiàn) n 個元素的存儲。算法代碼6、設(shè)一帶頭結(jié)點的單鏈表,設(shè)計算法將表中值相同的元素僅保留一個結(jié)點。提示:指針p從鏈表的第一個元素開始,利用指針q從指針p位置開始向后搜索整個鏈表,刪除與之值相同的元素;指針p繼續(xù)指向下一個元素,開始下一輪的刪除,直至p= null為至,既完成了對整個鏈表元素的刪除相同值。算法代碼四、實驗小結(jié)五、教師評語實驗二棧和隊列一、實驗目的1、掌握棧的結(jié)構(gòu)特性及
20、其入棧,出棧操作;2、掌握隊列的結(jié)構(gòu)特性及其入隊、出隊的操作,掌握循環(huán)隊列的特點及其操作。二、實驗預習說明以下概念1、順序棧:2、鏈棧:3、循環(huán)隊列:4、鏈隊三、實驗內(nèi)容和要求,運1、閱讀下面程序,將函數(shù)Push和函數(shù)Pop補充完整。要求輸入元素序列1 2 3 4 5 e行結(jié)果如下所示。#in clude#in clude#defi ne ERROR 0#defi ne OK 1#defi ne STACK_INT_SIZE 10 /*存儲空間初始分配量 */#define STACKINCREMENT 5 /* 存儲空間分配增量 */ typedef int ElemType; /*定義元素
21、的類型 */typedef structElemType *base;ElemType *top;int stacksize; /*當前已分配的存儲空間 */SqStack;構(gòu)造空棧 */入棧 */出棧 */創(chuàng)建棧 */出棧并輸出棧中元素 */int InitStack(SqStack *S); /*int push(SqStack *S,ElemType e); /* int Pop(SqStack *S,ElemType *e); /* int CreateStack(SqStack *S); /* void PrintStack(SqStack *S); /* int InitStack
22、(SqStack *S)S-base=(ElemType *)malloc(STACK_INT_SIZE *sizeof(ElemType); if(!S-base) return ERROR;S-top=S-base; S-stacksize=STACK_INT_SIZE;return OK; /*InitStack*/int Push(SqStack *S,ElemType e)/*Push*/int Pop(SqStack *S,ElemType *e)/*Pop*/int CreateStack(SqStack *S)int e;if(InitStack(S) printf(Init
23、Success!n);else printf(Init Fail!n); return ERROR;printf(input data:(Terminated by inputing a character)n); while(scanf(%d,&e)Push(S,e);return OK; /*CreateStack*/void PrintStack(SqStack *S)ElemType e;while(Pop(S,&e) printf(%3d,e);/*Pop_and_Print*/int main()SqStack ss;printf(n1-createStackn);CreateSt
24、ack(&ss); printf(n2-Pop&Printn);PrintStack(&ss);return 0;算法分析:輸入元素序列 1 2 3 4 5 ,為什么輸出序列為 5 4 3 2 1 ?體現(xiàn)了棧的什么 特性?2、在第 1 題的程序中,編寫一個十進制轉(zhuǎn)換為二進制的數(shù)制轉(zhuǎn)換算法函數(shù)(要求利用棧來 實現(xiàn)),并驗證其正確性。實現(xiàn)代碼驗證3、閱讀并運行程序,并分析程序功能。#include#include#include#define M 20#define elemtype chartypedef structelemtype stackM;int top;stacknode;void
25、init(stacknode *st);void push(stacknode *st,elemtype x);void pop(stack node *st);void in it(stack node *st)st-top=0;void push(stack node *st,elemtype x)if(st-top=M)prin tf(the stack is overflow! n);else st_top=st_top+1; st-stackst-top=x;void pop(stack node *st)if(st-top0) st-top-;else printf(“ Stack
26、 is Empty!n” );int mai n()char sM;int i;stack node *sp;prin tf(create a empty stack! n); sp=malloc(sizeof(stack no de);ini t(sp);prin tf(i nput a expressi on:n ”);gets(s);for(i=0;itop=0)prin tf(match)!n);elseprintf(not match)!n);return 0;輸入:2+(c-d)*6-(f-7)*a)/6運行結(jié)果:輸入:a-(c-d)*6-(s/3-x)/2運行結(jié)果: 程序的基本功
27、能:以下為選做實驗:4、設(shè)計算法,將一個表達式轉(zhuǎn)換為后綴表達式,并按照后綴表達式進行計算,得出表達式 得結(jié)果。實現(xiàn)代碼5、假設(shè)以帶頭結(jié)點的循環(huán)鏈表表示隊列, 并且只設(shè)一個指針指向隊尾結(jié)點 (不設(shè)隊頭指針) 試編寫相應的置空隊列、入隊列、出隊列的算法。實現(xiàn)代碼:四、實驗小結(jié)五、教師評語實驗三 串的模式匹配一、實驗目的1、了解串的基本概念2、掌握串的模式匹配算法的實現(xiàn)二、實驗預習說明以下概念1、模式匹配:2、BF算法:3、KMP算法:三、實驗內(nèi)容和要求1、閱讀并運行下面程序,根據(jù)輸入寫出運行結(jié)果。#include#include#define MAXSIZE 100typedef structch
28、ar dataMAXSIZE;int length;SqString;int strCompare(SqString *s1,SqString *s2); /* 串的比較 */ void show_strCompare();void strSub(SqString *s,int start,int sublen,SqString *sub);/* 求子串 */void show_subString();int strCompare(SqString *s1,SqString *s2)int i;for(i=0;ilength&ilength;i+) if(s1-datai!=s2-datai)
29、 return s1-datai-s2-datai;return s1-length-s2-length;void show_strCompare()SqString s1,s2;int k;printf(n*show Compare*n);printf(input string s1:); gets(s1.data);s1.length=strlen(s1.data);printf(input string s2:);gets(s2.data);s2.length=strlen(s2.data); if(k=strCompare(&s1,&s2)=0) printf(s1=s2n);else
30、 if(k0)printf(s1s2n);printf(n*show over*n);void strSub(SqString *s,int start,int sublen,SqString *sub) int i;if(starts-length|sublens-length-start+1) sub-length=0;for(i=0;idatai=s-datastart+i-1;sub-length=sublen;void show_subString()SqString s,sub;int start,sublen,i;printf(n*show subString*n); print
31、f(input string s:);gets(s.data);s.length=strlen(s.data);printf(input start:);scanf(%d,&start);printf(input sublen:);scanf(%d,&sublen); strSub(&s,start,sublen,&sub);if(sub.length=0) printf(ERROR!n);elseprintf(subString is :);for(i=0;isublen;i+)printf(%c,sub.datai);printf(n*show over*n);int main()int
32、n;do printf(n-String-n); printf(1. strComparen); printf(2. subStringn); printf(0. EXITn); printf(ninput choice:); scanf(%d,&n); getchar(); switch(n)case 1:show_strCompare();break; case 2:show_subString();break; default:n=0;break;while(n);return 0;運行程序 輸入:1student students2Computer Data Stuctures10運行
33、結(jié)果:2、實現(xiàn)串的模式匹配算法。補充下面程序,實現(xiàn)串的BF和KMP算法。#include#include#define MAXSIZE 100 typedef structchar dataMAXSIZE; int length;SqString;int index_bf(SqString *s,SqString *t,int start); void getNext(SqString *t,int next);int index_kmp(SqString *s,SqString *t,int start,int next);void show_index();int index_bf(SqS
34、tring *s,SqString *t,int start)補充代碼 void getNext(SqString *t,int next)int i=0,j=-1;next0=-1;while(ilength)if(j=-1)|(t-datai=t-dataj) i+;j+;nexti=j;elsej=nextj;int index_kmp(SqString *s,SqString *t,int start,int next)補充代碼 void show_index()SqString s,t;int k,nextMAXSIZE=0,i; printf(n*show index*n); pr
35、intf(input string s:);gets(s.data);s.length=strlen(s.data); printf(input string t:);gets(t.data);t.length=strlen(t.data);printf(input start position:);scanf(%d,&k);printf(BF:nthe result of BF is %dn,index_bf(&s,&t,k); getNext(&t,next);printf(KMP:n);printf(next:);for(i=0;it.length;i+) printf(%3d,next
36、i);printf(n);printf(the result of KMP is %dn,index_kmp(&s,&t,k,next); printf(n*show over*n);int main() show_index(); return 0;輸入: abcaabbabcabaacbacba abcabaa1運行結(jié)果:四、實驗小結(jié)五、教師評語實驗四 二叉樹一、實驗目的1、掌握二叉樹的基本特性2、掌握二叉樹的先序、中序、后序的遞歸遍歷算法3、理解二叉樹的先序、中序、后序的非遞歸遍歷算法4、通過求二叉樹的深度、葉子結(jié)點數(shù)和層序遍歷等算法,理解二叉樹的基本特性二、實驗預習說明以下概念1、二叉
37、樹:2、遞歸遍歷:3、非遞歸遍歷:4、層序遍歷:、實驗內(nèi)容和要求1、閱讀并運行下面程序,根據(jù)輸入寫出運行結(jié)果,并畫出二叉樹的形態(tài)。 #include #include節(jié)點結(jié)構(gòu)聲明 */節(jié)點數(shù)據(jù) */指針*/先序遍歷創(chuàng)建二叉樹 */#define MAX 20typedef struct BTNode /* char data ; /* struct BTNode *lchild; struct BTNode *rchild ; /*BiTree;void createBiTree(BiTree *t) /* char s;BiTree q;printf(nplease input data:(
38、exit for #);s=getche();if(s=#)*t=NULL; return; q=(BiTree)malloc(sizeof(struct BTNode); if(q=NULL)printf(Memory alloc failure!); exit(0); q-data=s;*t=q;createBiTree(&q-lchild); /*遞歸建立左子樹 */createBiTree(&q-rchild); /*遞歸建立右子樹 */void PreOrder(BiTree p) /*if ( p!= NULL ) printf(%c, p-data); PreOrder( p-l
39、child ) ; PreOrder( p-rchild) ;void InOrder(BiTree p) /*if( p!= NULL ) InOrder( p-lchild ) ; printf(%c, p-data); InOrder( p-rchild) ;void PostOrder(BiTree p) /*if ( p!= NULL ) PostOrder( p-lchild ) ; PostOrder( p-rchild) ; printf(%c, p-data);先序遍歷二叉樹 */中序遍歷二叉樹 */后序遍歷二叉樹 */先序遍歷的非遞歸算法 */void Preorder_n
40、(BiTree p) /*BiTree stackMAX,q;int top=0,i;for(i=0;idata); if(q-rchild!=NULL) stacktop+=q-rchild; if(q-lchild!=NULL) q=q-lchild;elseif(top0) q=stack-top; else q=NULL;釋放二叉樹空間 */void release(BiTree t) /* if(t!=NULL) release(t-lchild); release(t-rchild); free(t);int main()BiTree t=NULL; createBiTree(&t
41、); printf(nnPreOrder the tree is:);PreOrder(t); printf(nnInOrder the tree is:);InOrder(t); printf(nnPostOrder the tree is:);PostOrder(t);printf(nn 先序遍歷序列(非遞歸) :); Preorder_n(t);release(t); return 0; 運行程序 輸入:ABC#DE#G#F# 運行結(jié)果:2、在上題中補充求二叉樹中求結(jié)點總數(shù)算法(提示:可在某種遍歷過程中統(tǒng)計遍歷的結(jié)點 數(shù)),并在主函數(shù)中補充相應的調(diào)用驗證正確性。算法代碼:3、在上題中補充
42、求二叉樹中求 葉子結(jié)點 總數(shù)算法(提示:可在某種遍歷過程中統(tǒng)計遍歷的 葉子結(jié)點數(shù)) ,并在主函數(shù)中補充相應的調(diào)用驗證正確性。算法代碼:4、在上題中補充求二叉樹深度算法,并在主函數(shù)中補充相應的調(diào)用驗證正確性。 算法代碼:選做實驗:(代碼可另附紙)4、 補充二叉樹層次遍歷算法。 (提示:利用隊列實現(xiàn))5、補充二叉樹中序、后序非遞歸算法。四、實驗小結(jié)五、教師評語實驗五 圖的表示與遍歷一、實驗目的1、掌握圖的鄰接矩陣和鄰接表表示2、掌握圖的深度優(yōu)先和廣度優(yōu)先搜索方法3、理解圖的應用方法二、實驗預習說明以下概念1、深度優(yōu)先搜索遍歷:2、廣度優(yōu)先搜索遍歷:3、拓撲排序:4、最小生成樹:5、最短路徑:三、實
43、驗內(nèi)容和要求1、閱讀并運行下面程序,根據(jù)輸入寫出運行結(jié)果。#include#define N 20#define TRUE 1#define FALSE 0int visitedN; typedef struct /* int dataN;int front,rear;queue;typedef struct /*int vexnum,arcnum;char vexsN;int arcsNN; graph;隊列的定義 */圖的鄰接矩陣 */void createGraph(graph *g); /* void dfs(int i,graph *g); /*建立一個無向圖的鄰接矩陣 */ 從第
44、i 個頂點出發(fā)深度優(yōu)先搜索 */void tdfs(graph *g); /* void bfs(int k,graph *g); /* void tbfs(graph *g); /* void init_visit(); /*深度優(yōu)先搜索整個圖 */ 從第 k 個頂點廣度優(yōu)先搜索 */廣度優(yōu)先搜索整個圖 */初始化訪問標識數(shù)組 */int i;輸入頂點序列 (以#結(jié)束 ):n);建立一個無向圖的鄰接矩陣 */讀入頂點信息 */頂點數(shù)目 */ 鄰接矩陣初始化 */n);讀入邊 i,j*/讀入 i,j 為 1 時結(jié)束 */void createGraph(graph *g) /* int i,j
45、;char v;g-vexnum=0;g-arcnum=0;i=0;printf(while(v=getchar()!=#) g-vexsi=v; /*i+;g-vexnum=i; /* for(i=0;ivexnum;i+) /* for(j=0;jvexnum;j+) g-arcsij=0;printf( 輸入邊的信息: scanf(%d,%d,&i,&j); /* while(i!=-1) /* g-arcsij=1;g-arcsji=1; scanf(%d,%d,&i,&j);void dfs(int i,graph *g) /*從第 i 個頂點出發(fā)深度優(yōu)先搜索 */int j;pri
46、ntf(%c,g-vexsi);visitedi=TRUE;for(j=0;jvexnum;j+)if(g-arcsij=1)&(!visitedj)dfs(j,g);void tdfs(graph *g) /* 深度優(yōu)先搜索整個圖 */printf(n從頂點(開始深度優(yōu)先搜索序列:”,g-vexsO);for(i=0;ivexnum;i+)if(visitedi!=TRUE) dfs(i,g);void bfs(int k,graph *g) /*從第 k 個頂點廣度優(yōu)先搜索 */int i,j;queue qlist,*q;q=&qlist;q-rear=0;q-front=0;print
47、f(%c,g-vexsk);visitedk=TRUE;q-dataq-rear=k;q-rear=(q-rear+1)%N;while(q-rear!=q-front)i=q-dataq-front;q-front=(q-front+1)%N;for(j=0;jvexnum;j+) if(g-arcsij=1)&(!visitedj)printf(%c,g-vexsj);visitedj=TRUE;q-dataq-rear=j; q-rear=(q-rear+1)%N;void tbfs(graph *g) /* 廣度優(yōu)先搜索整個圖 */int i;printf(n從頂點(開始廣度優(yōu)先搜索序
48、列:”,g-vexsO);for(i=0;ivexnum;i+)if(visitedi!=TRUE) bfs(i,g);void init_visit() /*初始化訪問標識數(shù)組 */for(i=0;iN;i+)visitedi=FALSE;int mai n()graph ga;int i,j;n);createGraph( &ga);printf(”無向圖的鄰接矩陣:for(i=0;iga.vex nu m;i+) for(j=0;jga.vex nu m;j+) prin tf(%3d,ga.arcsij);prin tf(n);ini t_visit();tdfs(&ga);ini t_visit();tbfs(&ga
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年全球及中國結(jié)構(gòu)型包裝用蜂窩行業(yè)頭部企業(yè)市場占有率及排名調(diào)研報告
- 2025-2030全球鈑金沖焊型液力變矩器行業(yè)調(diào)研及趨勢分析報告
- 2025-2030全球高速RDF制粒機行業(yè)調(diào)研及趨勢分析報告
- 2025-2030全球膨脹式氣體壓縮機行業(yè)調(diào)研及趨勢分析報告
- 2025安裝工程技術(shù)咨詢合同
- 2025合同模板店面轉(zhuǎn)讓合同雙方范本
- 2025合同模板城市建筑垃圾處理特許經(jīng)營協(xié)議示范文本范本
- 防水購銷合同范本年
- 比賽租賃游泳池合同書
- 開業(yè)慶典活動策劃合同書年
- 小學六年級數(shù)學上冊《簡便計算》練習題(310題-附答案)
- 地理標志培訓課件
- 2023行政主管年終工作報告五篇
- 2024年中國養(yǎng)老產(chǎn)業(yè)商學研究報告-銀發(fā)經(jīng)濟專題
- 培訓如何上好一堂課
- 高教版2023年中職教科書《語文》(基礎(chǔ)模塊)下冊教案全冊
- 2024醫(yī)療銷售年度計劃
- 稅務局個人所得稅綜合所得匯算清繳
- 人教版語文1-6年級古詩詞
- 上學期高二期末語文試卷(含答案)
- 人教版英語七年級上冊閱讀理解專項訓練16篇(含答案)
評論
0/150
提交評論