《數(shù)據(jù)結(jié)構(gòu)》(C語言版)嚴(yán)蔚敏著-數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)指導(dǎo)(總37頁)



《《數(shù)據(jù)結(jié)構(gòu)》(C語言版)嚴(yán)蔚敏著-數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)指導(dǎo)(總37頁)》由會員分享,可在線閱讀,更多相關(guān)《《數(shù)據(jù)結(jié)構(gòu)》(C語言版)嚴(yán)蔚敏著-數(shù)據(jù)結(jié)構(gòu)實(shí)驗(yàn)指導(dǎo)(總37頁)(37頁珍藏版)》請?jiān)谘b配圖網(wǎng)上搜索。
1、《數(shù)據(jù)結(jié)構(gòu)》實(shí)驗(yàn)指導(dǎo)及報(bào)告書 (2012) / 學(xué)年 第 學(xué)期 姓 名:______________ 學(xué) 號:______________ 班 級:______________ 指導(dǎo)教師:______________ 信息科學(xué)與工程學(xué)院 2012 預(yù)備實(shí)驗(yàn) C語言的函數(shù)數(shù)組指針結(jié)構(gòu)體知識 一、實(shí)驗(yàn)?zāi)康? 1、復(fù)習(xí)C語言中函數(shù)、數(shù)組、指針、結(jié)構(gòu)體與共用體等的概念。 2、熟悉利用C語言進(jìn)行程序設(shè)計(jì)的一般方法。 二、實(shí)驗(yàn)預(yù)習(xí) 說明以下C語言中的概念 1、 函數(shù): 2、 數(shù)組: 3、指針: 4、結(jié)構(gòu)體 5、
2、共用體
三、實(shí)驗(yàn)內(nèi)容和要求
1、調(diào)試程序:輸出100以內(nèi)所有的素?cái)?shù)(用函數(shù)實(shí)現(xiàn))。
#include
3、
return 0;
}
運(yùn)行結(jié)果:
2、 調(diào)試程序:對一維數(shù)組中的元素進(jìn)行逆序排列。
#include 4、temp;
}
printf("\nthe changed Array is:\n");
for(i=0;i 5、據(jù):\n");
for(i=0;i 6、為該列的最小值*/
if(a[j][k]
int main(){
int a[3][4]={1,3,5,7,9,11,13,15,17,19,21,23};
int *p;
for(p=a[0];p
7、 printf("\n");
printf("%4d",*p);
}
return 0;
}
運(yùn)行結(jié)果:
5、 調(diào)試程序:設(shè)有一個(gè)教師與學(xué)生通用的表格,教師的數(shù)據(jù)有姓名、年齡、職業(yè)、教研室四項(xiàng),學(xué)生有姓名、年齡、專業(yè)、班級四項(xiàng),編程輸入人員的數(shù)據(jù),再以表格輸出。
#include 8、*班級*/
char office[10]; /*教研室*/
}depa;
}stu[N];
int main(){
int i; int n;
printf(“\n請輸入人員數(shù)(<10):\n”);
scanf(“%d”,&n);
for(i=0;i 9、.job==’s’)
scanf("%d",&stu[i].depa.class);
else
scanf("%s",stu[i].depa.office);
}
printf(“name age job class/office”);
for(i=0;i 10、 else
printf("%s %3d %3c %s\n",stu[i].name, stu[i].age, stu[i].job, stu[i].depa.office);
}
}
輸入的數(shù)據(jù):2
Wang 19 s 99061
Li 36 t computer
運(yùn)行結(jié)果:
四、實(shí)驗(yàn)小結(jié)
五、教師評語
實(shí)驗(yàn)一 順序表與鏈表
一、實(shí)驗(yàn)?zāi)康?
1、掌握線性表中元素的前驅(qū)、后續(xù)的概念。
2、掌握順序表與鏈表的建立、插入元素、刪除表中某元素的算法。
3、對線性表相應(yīng)算法的時(shí)間復(fù)雜度進(jìn)行分析。
4、理解順序表、鏈表數(shù)據(jù)結(jié)構(gòu)的特點(diǎn)(優(yōu)缺點(diǎn))。
二、 11、實(shí)驗(yàn)預(yù)習(xí)
說明以下概念
1、線性表:
2、順序表:
3、鏈表:
三、實(shí)驗(yàn)內(nèi)容和要求
1、閱讀下面程序,在橫線處填寫函數(shù)的基本功能。并運(yùn)行程序,寫出結(jié)果。
#include 12、lemType *slist; /*存儲空間的基地址*/
int length; /*順序表的當(dāng)前長度*/
int listsize; /*當(dāng)前分配的存儲空間*/
}Sqlist;
int InitList_sq(Sqlist *L); /* */
int CreateList_sq(Sqlist *L,int n); /* */
int ListInsert_sq(Sqlist *L,int i,ElemType e);/* 13、 */
int PrintList_sq(Sqlist *L); /*輸出順序表的元素*/
int ListDelete_sq(Sqlist *L,int i); /*刪除第i個(gè)元素*/
int ListLocate(Sqlist *L,ElemType e); /*查找值為e的元素*/
int InitList_sq(Sqlist *L){
L->slist=(ElemType*)malloc(INIT_SIZE*sizeof(ElemType));
if(!L->slist) return ERROR;
L->leng 14、th=0;
L->listsize=INIT_SIZE;
return OK;
}/*InitList*/
int CreateList_sq(Sqlist *L,int n){
ElemType e;
int i;
for(i=0;i 15、,e))
return ERROR;
}
return OK;
}/*CreateList*/
/*輸出順序表中的元素*/
int PrintList_sq(Sqlist *L){
int i;
for(i=1;i<=L->length;i++)
printf("%5d",L->slist[i-1]);
return OK;
}/*PrintList*/
int ListInsert_sq(Sqlist *L,int i,ElemType e){
int k;
if(i<1||i 16、>L->length+1)
return 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->slist[k+1]= L->slis 17、t[k];
}
L->slist[i-1]=e;
L->length++;
return OK;
}/*ListInsert*/
/*在順序表中刪除第i個(gè)元素*/
int ListDelete_sq(Sqlist *L,int i){
}
/*在順序表中查找指定值元素,返回其序號*/
int ListLocate(Sqlist *L,ElemType e){
}
int main(){
Sqlist sl;
int n, 18、m,k;
printf("please input n:"); /*輸入順序表的元素個(gè)數(shù)*/
scanf("%d",&n);
if(n>0){
printf("\n1-Create Sqlist:\n");
InitList_sq(&sl);
CreateList_sq(&sl,n);
printf("\n2-Print Sqlist:\n");
PrintList_sq(&sl);
printf("\nplease input insert locati 19、on and data:(location,data)\n");
scanf("%d,%d",&m,&k);
ListInsert_sq(&sl,m,k);
printf("\n3-Print Sqlist:\n");
PrintList_sq(&sl);
printf("\n");
}
else
printf("ERROR");
return 0;
}
l 運(yùn)行結(jié)果
l 算法分析
2、為第1題補(bǔ)充刪除和查找功能函數(shù),并在主函數(shù)中補(bǔ)充代碼驗(yàn)證算法的正確性。
刪除算法代碼 20、:
l 運(yùn)行結(jié)果
l 算法分析
查找算法代碼:
l 運(yùn)行結(jié)果
l 算法分析
3、閱讀下面程序,在橫線處填寫函數(shù)的基本功能。并運(yùn)行程序,寫出結(jié)果。
#include 21、eateList(int n); /* */
void PrintList(LinkList L); /*輸出帶頭結(jié)點(diǎn)單鏈表的所有元素*/
int GetElem(LinkList L,int i,ElemType *e); /* */
LinkList CreateList(int n){
LNode *p,*q,*head;
int i;
head=(LinkList)malloc(sizeof(LNode)); head->next=NULL; 22、
p=head;
for(i=0;i 23、eturn head;
}/*CreateList*/
void PrintList(LinkList L){
LNode *p;
p=L->next; /*p指向單鏈表的第1個(gè)元素*/
while(p!=NULL){
printf("%5d",p->data);
p=p->next;
}
}/*PrintList*/
int GetElem(LinkList L,int i,ElemType *e){
LNode *p;int j=1;
p=L->next;
while(p&& 24、jnext;j++;
}
if(!p||j>i)
return ERROR;
*e=p->data;
return OK;
}/*GetElem*/
int main(){
int n,i;ElemType e;
LinkList L=NULL; /*定義指向單鏈表的指針*/
printf("please input n:"); /* 25、輸入單鏈表的元素個(gè)數(shù)*/
scanf("%d",&n);
if(n>0){
printf("\n1-Create LinkList:\n");
L=CreateList(n);
printf("\n2-Print LinkList:\n");
PrintList(L);
printf("\n3-GetElem from LinkList:\n");
printf("input i=");
scanf("%d",& 26、i);
if(GetElem(L,i,&e))
printf("No%i is %d",i,e);
else
printf("not exists");
}else
printf("ERROR");
return 0;
}
l 運(yùn)行結(jié)果
l 算法分析
4、為第3題補(bǔ)充插入功能函數(shù)和刪除功能函數(shù)。并在主函數(shù)中補(bǔ)充代碼驗(yàn)證算法的正確性。
插入算法代碼:
l 運(yùn)行結(jié)果
l 算法分析
刪除算法代碼:
l 運(yùn)行結(jié)果
l 算法分析
以下為選做實(shí)驗(yàn):
27、
5、循環(huán)鏈表的應(yīng)用(約瑟夫回環(huán)問題)
n個(gè)數(shù)據(jù)元素構(gòu)成一個(gè)環(huán),從環(huán)中任意位置開始計(jì)數(shù),計(jì)到m將該元素從表中取出,重復(fù)上述過程,直至表中只剩下一個(gè)元素。
提示:用一個(gè)無頭結(jié)點(diǎn)的循環(huán)單鏈表來實(shí)現(xiàn)n個(gè)元素的存儲。
l 算法代碼
6、設(shè)一帶頭結(jié)點(diǎn)的單鏈表,設(shè)計(jì)算法將表中值相同的元素僅保留一個(gè)結(jié)點(diǎn)。
提示:指針p從鏈表的第一個(gè)元素開始,利用指針q從指針p位置開始向后搜索整個(gè)鏈表,刪除與之值相同的元素;指針p繼續(xù)指向下一個(gè)元素,開始下一輪的刪除,直至p==null為至,既完成了對整個(gè)鏈表元素的刪除相同值。
l 算法代碼
四、實(shí)驗(yàn)小結(jié)
五、教師評語
實(shí)驗(yàn)二 棧和隊(duì)列
一、實(shí)驗(yàn)?zāi)康?
28、1、掌握棧的結(jié)構(gòu)特性及其入棧,出棧操作;
2、掌握隊(duì)列的結(jié)構(gòu)特性及其入隊(duì)、出隊(duì)的操作,掌握循環(huán)隊(duì)列的特點(diǎn)及其操作。
二、實(shí)驗(yàn)預(yù)習(xí)
說明以下概念
1、順序棧:
2、鏈棧:
3、循環(huán)隊(duì)列:
4、鏈隊(duì)
三、實(shí)驗(yàn)內(nèi)容和要求
1、閱讀下面程序,將函數(shù)Push和函數(shù)Pop補(bǔ)充完整。要求輸入元素序列1 2 3 4 5 e,運(yùn)行結(jié)果如下所示。
#include 29、INCREMENT 5 /*存儲空間分配增量*/
typedef int ElemType; /*定義元素的類型*/
typedef struct{
ElemType *base;
ElemType *top;
int stacksize; /*當(dāng)前已分配的存儲空間*/
}SqStack;
int InitStack(SqStack *S); /*構(gòu)造空棧*/
int push(SqStack *S,ElemType e); /*入棧*/
int Pop(SqStack *S,ElemType *e); /*出棧*/
int Cre 30、ateStack(SqStack *S); /*創(chuàng)建棧*/
void PrintStack(SqStack *S); /*出棧并輸出棧中元素*/
int InitStack(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 P 31、ush(SqStack *S,ElemType e){
}/*Push*/
int Pop(SqStack *S,ElemType *e){
}/*Pop*/
int CreateStack(SqStack *S){
int e;
if(InitStack(S))
printf("Init Success!\n");
else{
printf("Init Fail!\n");
return ERROR;
}
printf("input data:(Terminated by inpu 32、ting 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-createStack\n");
CreateStack( 33、&ss);
printf("\n2-Pop&Print\n");
PrintStack(&ss);
return 0;
}
l 算法分析:輸入元素序列1 2 3 4 5,為什么輸出序列為5 4 3 2 1?體現(xiàn)了棧的什么特性?
2、在第1題的程序中,編寫一個(gè)十進(jìn)制轉(zhuǎn)換為二進(jìn)制的數(shù)制轉(zhuǎn)換算法函數(shù)(要求利用棧來實(shí)現(xiàn)),并驗(yàn)證其正確性。
l 實(shí)現(xiàn)代碼
l 驗(yàn)證
3、閱讀并運(yùn)行程序,并分析程序功能。
#include 34、fine elemtype char
typedef struct
{
elemtype stack[M];
int top;
}
stacknode;
void init(stacknode *st);
void push(stacknode *st,elemtype x);
void pop(stacknode *st);
void init(stacknode *st)
{
st->top=0;
}
void push(stacknode *st,elemtype x)
{
if(st->top==M)
35、 printf("the stack is overflow!\n");
else
{
st->top=st->top+1;
st->stack[st->top]=x;
}
}
void pop(stacknode *st)
{
if(st->top>0) st->top--;
else printf(“Stack is Empty!\n”);
}
int main()
{
char s[M];
int i;
stacknode *sp;
printf("cre 36、ate a empty stack!\n");
sp=malloc(sizeof(stacknode));
init(sp);
printf("input a expression:\n");
gets(s);
for(i=0;i 37、f("'('match')'!\n");
else
printf("'('not match')'!\n");
return 0;
}
l 輸入:2+((c-d)*6-(f-7)*a)/6
l 運(yùn)行結(jié)果:
l 輸入:a-((c-d)*6-(s/3-x)/2
l 運(yùn)行結(jié)果:
l 程序的基本功能:
以下為選做實(shí)驗(yàn):
4、設(shè)計(jì)算法,將一個(gè)表達(dá)式轉(zhuǎn)換為后綴表達(dá)式,并按照后綴表達(dá)式進(jìn)行計(jì)算,得出表達(dá)式得結(jié)果。
l 實(shí)現(xiàn)代碼
5、假設(shè)以帶頭結(jié)點(diǎn)的循環(huán)鏈表表示隊(duì)列,并且只設(shè)一個(gè)指針指向隊(duì)尾結(jié)點(diǎn)(不設(shè)隊(duì)頭指針),試編寫相應(yīng)的置空隊(duì)列、入隊(duì)列、出隊(duì)列的算 38、法。
實(shí)現(xiàn)代碼:
四、實(shí)驗(yàn)小結(jié)
五、教師評語
實(shí)驗(yàn)三 串的模式匹配
一、實(shí)驗(yàn)?zāi)康?
1、了解串的基本概念
2、掌握串的模式匹配算法的實(shí)現(xiàn)
二、實(shí)驗(yàn)預(yù)習(xí)
說明以下概念
1、模式匹配:
2、BF算法:
3、KMP算法:
三、實(shí)驗(yàn)內(nèi)容和要求
1、閱讀并運(yùn)行下面程序,根據(jù)輸入寫出運(yùn)行結(jié)果。
#include 39、String *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;i 40、ta[i]-s2->data[i];
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.len 41、gth=strlen(s2.data);
if((k=strCompare(&s1,&s2))==0)
printf("s1=s2\n");
else if(k<0)
printf("s1 42、->length||sublen>s->length-start+1){
sub->length=0;
}
for(i=0;i 43、ata);
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");
else{
printf("subString is :");
for(i=0;i 44、blen;i++)
printf("%c",sub.data[i]);
}
printf("\n***show over***\n");
}
int main(){
int n;
do {
printf("\n---String---\n");
printf("1. strCompare\n");
printf("2. subString\n");
printf("0. EXIT\n");
printf("\ninput choice: 45、");
scanf("%d",&n);
getchar();
switch(n){
case 1:show_strCompare();break;
case 2:show_subString();break;
default:n=0;break;
}
}while(n);
return 0;
}
l 運(yùn)行程序
輸入:
1
student
students
2
Computer Data Stuctures
1 46、0
4
運(yùn)行結(jié)果:
2、實(shí)現(xiàn)串的模式匹配算法。補(bǔ)充下面程序,實(shí)現(xiàn)串的BF和KMP算法。
#include 47、int start,int next[]);
void show_index();
int index_bf(SqString *s,SqString *t,int start){
補(bǔ)充代碼.....
}
void getNext(SqString *t,int next[]){
int i=0,j=-1;
next[0]=-1;
while(i 48、int index_kmp(SqString *s,SqString *t,int start,int next[]){
補(bǔ)充代碼.....
}
void show_index(){
SqString s,t;
int k,next[MAXSIZE]={0},i;
printf("\n***show index***\n");
printf("input string s:");
gets(s.data);
s.length=strlen(s.data);
printf("input string t:");
49、 gets(t.data);
t.length=strlen(t.data);
printf("input start position:");
scanf("%d",&k);
printf("BF:\nthe result of BF is %d\n",index_bf(&s,&t,k));
getNext(&t,next);
printf("KMP:\n");
printf("next[]:");
for(i=0;i 50、
printf("\n");
printf("the result of KMP is %d\n",index_kmp(&s,&t,k,next));
printf("\n***show over***\n");
}
int main(){
show_index();
return 0;
}
輸入:
abcaabbabcabaacbacba
abcabaa
1
運(yùn)行結(jié)果:
四、實(shí)驗(yàn)小結(jié)
五、教師評語
實(shí)驗(yàn)四 二叉樹
一、實(shí)驗(yàn)?zāi)康?
1、掌握二叉樹的基本特性
2、掌握二叉樹的先序、中序、后序的遞歸遍歷算法
3、理解二叉樹的先序、中序 51、、后序的非遞歸遍歷算法
4、通過求二叉樹的深度、葉子結(jié)點(diǎn)數(shù)和層序遍歷等算法,理解二叉樹的基本特性
二、實(shí)驗(yàn)預(yù)習(xí)
說明以下概念
1、二叉樹:
2、遞歸遍歷:
3、 非遞歸遍歷:
4、層序遍歷:
三、實(shí)驗(yàn)內(nèi)容和要求
1、閱讀并運(yùn)行下面程序,根據(jù)輸入寫出運(yùn)行結(jié)果,并畫出二叉樹的形態(tài)。
#include 52、child;
struct BTNode *rchild ; /*指針*/
}*BiTree;
void createBiTree(BiTree *t){ /* 先序遍歷創(chuàng)建二叉樹*/
char s;
BiTree q;
printf("\nplease input data:(exit for #)");
s=getche();
if(s=='#'){*t=NULL; return;}
q=(BiTree)malloc(sizeof(struct BTNode));
if(q==NULL){printf("Memory alloc failure!"); 53、 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->lchild ) ;
PreOrder( p->rchild) ;
}
}
void InOrder(B 54、iTree 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);
55、 }
}
void Preorder_n(BiTree p){ /*先序遍歷的非遞歸算法*/
BiTree stack[MAX],q;
int top=0,i;
for(i=0;i 56、
else
if(top>0) 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);
printf("\n\nPreOrder 57、 the tree is:");
PreOrder(t);
printf("\n\nInOrder the tree is:");
InOrder(t);
printf("\n\nPostOrder the tree is:");
PostOrder(t);
printf("\n\n先序遍歷序列(非遞歸):");
Preorder_n(t);
release(t);
return 0;
}
l 運(yùn)行程序
輸入:
ABC##DE#G##F###
運(yùn)行結(jié)果:
2、在上題中補(bǔ)充求二叉樹中求結(jié)點(diǎn)總數(shù)算 58、法(提示:可在某種遍歷過程中統(tǒng)計(jì)遍歷的結(jié)點(diǎn)數(shù)),并在主函數(shù)中補(bǔ)充相應(yīng)的調(diào)用驗(yàn)證正確性。
算法代碼:
3、在上題中補(bǔ)充求二叉樹中求葉子結(jié)點(diǎn)總數(shù)算法(提示:可在某種遍歷過程中統(tǒng)計(jì)遍歷的葉子結(jié)點(diǎn)數(shù)),并在主函數(shù)中補(bǔ)充相應(yīng)的調(diào)用驗(yàn)證正確性。
算法代碼:
4、在上題中補(bǔ)充求二叉樹深度算法,并在主函數(shù)中補(bǔ)充相應(yīng)的調(diào)用驗(yàn)證正確性。
算法代碼:
選做實(shí)驗(yàn):(代碼可另附紙)
4、 補(bǔ)充二叉樹層次遍歷算法。(提示:利用隊(duì)列實(shí)現(xiàn))
5、補(bǔ)充二叉樹中序、后序非遞歸算法。
四、實(shí)驗(yàn)小結(jié)
五、教師評語
實(shí)驗(yàn)五 圖的表示與遍歷
一、實(shí)驗(yàn)?zāi)康?
1、掌握圖的鄰接矩陣和鄰接表表示
2、掌握圖的深度優(yōu) 59、先和廣度優(yōu)先搜索方法
3、理解圖的應(yīng)用方法
二、實(shí)驗(yàn)預(yù)習(xí)
說明以下概念
1、深度優(yōu)先搜索遍歷:
2、廣度優(yōu)先搜索遍歷:
3、拓?fù)渑判颍?
4、最小生成樹:
5、最短路徑:
三、實(shí)驗(yàn)內(nèi)容和要求
1、閱讀并運(yùn)行下面程序,根據(jù)輸入寫出運(yùn)行結(jié)果。
#include 60、pedef struct /*圖的鄰接矩陣*/
{
int vexnum,arcnum;
char vexs[N];
int arcs[N][N];
}
graph;
void createGraph(graph *g); /*建立一個(gè)無向圖的鄰接矩陣*/
void dfs(int i,graph *g); /*從第i個(gè)頂點(diǎn)出發(fā)深度優(yōu)先搜索*/
void tdfs(graph *g); /*深度優(yōu)先搜索整個(gè)圖*/
void bfs(int k,graph *g); /*從第k個(gè)頂點(diǎn)廣度優(yōu)先搜索*/
void t 61、bfs(graph *g); /*廣度優(yōu)先搜索整個(gè)圖*/
void init_visit(); /*初始化訪問標(biāo)識數(shù)組*/
void createGraph(graph *g) /*建立一個(gè)無向圖的鄰接矩陣*/
{ int i,j;
char v;
g->vexnum=0;
g->arcnum=0;
i=0;
printf("輸入頂點(diǎn)序列(以#結(jié)束):\n");
while((v=getchar())!='#')
{
g->vexs[i]=v; 62、 /*讀入頂點(diǎn)信息*/
i++;
}
g->vexnum=i; /*頂點(diǎn)數(shù)目*/
for(i=0;i 63、 g->arcs[i][j]=1;
g->arcs[j][i]=1;
scanf("%d,%d",&i,&j);
}
}
void dfs(int i,graph *g) /*從第i個(gè)頂點(diǎn)出發(fā)深度優(yōu)先搜索*/
{
int j;
printf("%c",g->vexs[i]);
visited[i]=TRUE;
for(j=0;j 64、g);
}
void tdfs(graph *g) /*深度優(yōu)先搜索整個(gè)圖*/
{
int i;
printf("\n從頂點(diǎn)%C開始深度優(yōu)先搜索序列:",g->vexs[0]);
for(i=0;i 65、ear=0;
q->front=0;
printf("%c",g->vexs[k]);
visited[k]=TRUE;
q->data[q->rear]=k;
q->rear=(q->rear+1)%N;
while(q->rear!=q->front)
{
i=q->data[q->front];
q->front=(q->front+1)%N;
for(j=0;j 66、(!visited[j]))
{
printf("%c",g->vexs[j]);
visited[j]=TRUE;
q->data[q->rear]=j;
q->rear=(q->rear+1)%N;
}
}
}
void tbfs(graph *g) /*廣度優(yōu)先搜索整個(gè)圖*/
{
int i;
printf("\n從頂點(diǎn)%C開始廣度優(yōu)先搜索序列:",g->vexs[0]);
for(i=0;i
- 溫馨提示:
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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 踏春尋趣 樂享時(shí)光——春季旅游踏春出游活動
- 清明假期至安全不缺席風(fēng)起正清明安全需守護(hù)
- 全國黨員教育培訓(xùn)工作規(guī)劃
- XX中小學(xué)公共衛(wèi)生培訓(xùn)樹立文明衛(wèi)生意識養(yǎng)成良好衛(wèi)生習(xí)慣
- 小學(xué)生常見傳染病預(yù)防知識培訓(xùn)傳染病的預(yù)防措施
- 3月18日全國愛肝日中西醫(yī)結(jié)合逆轉(zhuǎn)肝硬化
- 肝病健康宣教守護(hù)您的肝臟健康如何預(yù)防肝炎
- 垃圾分類小課堂教育綠色小衛(wèi)士分類大行動
- 中小學(xué)班主任經(jīng)驗(yàn)交流從勝任到優(yōu)秀身為世范為人師表 立責(zé)于心履責(zé)于行
- 教師數(shù)字化轉(zhuǎn)型理解與感悟教師數(shù)字化轉(zhuǎn)型的策略與建議
- 團(tuán)建小游戲團(tuán)建破冰小游戲團(tuán)隊(duì)協(xié)作破冰游戲多人互動
- 教師使用deepseek使用攻略讓備課效能提升
- 辦公室會議紀(jì)要培訓(xùn)會議內(nèi)容會議整理公文攥寫
- 黨員要注重培塑忠誠奮斗奉獻(xiàn)的人格力量
- 橙色卡通風(fēng)兒童春季趣味運(yùn)動會
相關(guān)資源
更多