数据结构实验指导书样本_第1页
数据结构实验指导书样本_第2页
数据结构实验指导书样本_第3页
数据结构实验指导书样本_第4页
数据结构实验指导书样本_第5页
已阅读5页,还剩40页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

《数据构造》实验指引书计算机专业实验中心编TIME\@"yyyy'年'M'月'd'日'"10月23日

目录《数据构造》上机实验内容和规定 3实验一、顺序表实现及应用 5实验二、链表实现及应用 8实验三、栈实现及应用 13实验四、队列实现及应用 14实验五、二叉树操作及应用 15实验六、图遍历操作及应用 20实验七、查找算法实现 27实验八、排序算法实现 29

《数据构造》上机实验内容和规定通过上机实验加深对课程内容理解,增长感性结识,提高程序设计、开发及调试能力。序号实验名称内容提要每组人数实验时数实验规定实验类别分值(总100分)1顺序表实现及应用掌握顺序表构造,实现其插入、删除等算法。运用顺序表将两个有序线性表合并为一种有序表。12必做设计10分2链表实现及应用掌握单链表构造,实现其插入、删除、查找等算法。运用单链表将两个有序链表合并为一种有序链表。12必做设计10分3栈实现及应用掌握栈构造,将栈应用于表达式计算问题12必做设计15分4队列实现及应用掌握队列构造,将队列应用于模仿服务台前排队现象问题12必做设计15分5二叉树操作及应用掌握二叉树存储,实现三种遍历递归算法、实现前序或中序非递归遍历算法12必做设计15分6图遍历操作及应用实现图存储、深度遍历和广度遍历算法12必做设计10分7查找算法实现实现顺序表二分查找算法12必做设计10分8排序算法实现实现直接插入排序、迅速排序等算法12必做设计15分本实验指引书合用于16学时《数据构造》实验课,实验项目详细内容如下:实验报告规定请按照实验教师规定,准时提交实验报告电子版文献。实验报告格式可个性化定义,内容涉及但不限于如下内容:题目、姓名、学号、班级(首页)需求分析:陈述程序设计任务,强调程序要做什么,明确规定:输入形式和输出值范畴;输出形式;程序所能达到功能;测试数据:涉及对的输入输出成果和错误输入及输出成果。概要设计:阐明用到数据构造定义、主程序流程及各程序模块之间调用关系。详细设计:提交带注释源程序或者用伪代码写出每个操作所涉及算法。调试分析:调试过程中所遇到问题及解决办法;算法时空分析;经验与体会。顾客使用阐明:阐明如何使用你设计程序,详细列出每一步操作环节。(如果程序操作简朴,可略去)测试成果:列出对于给定输入所产生输出成果。(若有也许,测试随输入规模增长所用算法实际运营时间变化)8、总结

实验一、顺序表实现及应用一、实验目理解和掌握线性表顺序存储构造;掌握用C语言上机调试线性表基本办法;掌握线性表基本操作:插入、删除、查找以及线性表合并等运算在顺序存储构造和链接存储构造上运算,以及对相应算法性能分析。二、实验规定给定一段程序代码,程序代码所完毕功能为:(1)建立一种线性表;(2)依次输入数据元素1,2,3,4,5,6,7,8,9,10;(3)删除数据元素5;(4)依次显示当前线性表中数据元素。假设该线性表数据元素个数在最坏状况下不会超过100个,规定使用顺序表。程序中有3处错误地方,有标记,属于逻辑错误,对照书中代码仔细分析后,规定同窗们修改错误代码,修改后上机调试得到对的运营成果。三、程序代码#include<stdio.h>#defineMaxSize100typedefintDataType;typedefstruct{DataTypelist[MaxSize];intsize;}SeqList;voidListInitiate(SeqList*L)/*初始化顺序表L*/{L->size=0;/*定义初始数据元素个数*/}intListLength(SeqListL)/*返回顺序表L当前数据元素个数*/{returnL.size;}intListInsert(SeqList*L,inti,DataTypex)/*在顺序表L位置i(0≤i≤size)前插入数据元素值x*//*插入成功返回1,插入失败返回0*/{intj;if(L->size>=MaxSize){printf("顺序表已满无法插入!\n");return0;}elseif(i<0||i>L->size){printf("参数i不合法!\n");return0;}else{//此段程序有一处错误for(j=L->size;j>i;j--)L->list[j]=L->list[j];/*为插入做准备*/L->list[i]=x;/*插入*/L->size++;/*元素个数加1*/return1;}}intListDelete(SeqList*L,inti,DataType*x)/*删除顺序表L中位置i(0≤i≤size-1)数据元素值并存储到参数x中*//*删除成功返回1,删除失败返回0*/{intj;if(L->size<=0){printf("顺序表已空无数据元素可删!\n");return0;}elseif(i<0||i>L->size-1){printf("参数i不合法");return0;}else{//此段程序有一处错误*x=L->list[i];/*保存删除元素到参数x中*/for(j=i+1;j<=L->size-1;j++)L->list[j]=L->list[j-1];/*依次前移*/L->size--;/*数据元素个数减1*/return1;}}intListGet(SeqListL,inti,DataType*x)/*取顺序表L中第i个数据元素值存于x中,成功则返回1,失败返回0*/{if(i<0||i>L.size-1){printf("参数i不合法!\n");return0;}else{*x=L.list[i];return1;}}voidmain(void){SeqListmyList;inti,x;ListInitiate(&myList);for(i=0;i<10;i++)ListInsert(&myList,i,i+1);ListDelete(&myList,4,&x);for(i=0;i<ListLength(myList);i++){ListGet(,i,&x);//此段程序有一处错误printf("%",x);}}四、实验任务1.改正上述程序中错误(必作)。2.编写合并函数,将两个有序线性表合并为一种有序表并在主函数中加以测试(选作)。3.完毕实验报告撰写。

实验二、链表实现及应用一、实验目理解和掌握线性表链式存储构造;掌握用C语言上机调试线性表基本办法;掌握线性表基本操作:插入、删除、查找以及线性表合并等运算在顺序存储构造和链接存储构造上运算,以及对相应算法性能分析。二、实验规定给定一段程序代码,程序代码所完毕功能为:(1)建立一种线性表;(2)依次输入数据元素1,2,3,4,5,6,7,8,9,10;(3)删除数据元素5;(4)依次显示当前线性表中数据元素。假设该线性表数据元素个数在最坏状况下不会超过100个,规定使用单链表。程序中有3处错误地方,有标记,属于逻辑错误,对照书中代码仔细分析后,规定同窗们修改错误代码,上机调试并得到对的运营成果。三、程序代码:#include<stdio.h>/*该文献包括pringtf()等函数*/#include<stdlib.h>/*该文献包括exit()等函数*/#include<malloc.h>/*该文献包括malloc()等函数*/typedefintDataType;/*定义DataType为int*/typedefstructNode{DataTypedata;structNode*next;}SLNode;voidListInitiate(SLNode**head)/*初始化*/{/*如果有内存空间,申请头结点空间并使头指针head指向头结点*/if((*head=(SLNode*)malloc(sizeof(SLNode)))==NULL)exit(1);(*head)->next=NULL;/*置链尾标记NULL*/}intListLength(SLNode*head)/*单链表长度*/{SLNode*p=head;/*p指向首元结点*/intsize=0;/*size初始为0*/while(p->next!=NULL)/*循环计数*/{p=p->next;size++;}returnsize;}intListInsert(SLNode*head,inti,DataTypex)/*在带头结点单链表head数据元素ai(0≤i≤size)结点前*//*插入一种存储数据元素x结点*/{SLNode*p,*q;intj;p=head;/*p指向首元结点*/j=-1;/*j初始为-1*/while(p->next!=NULL&&j<i-1)/*最后让指针p指向数据元素ai-1结点*/{p=p->next;j++;}if(j!=i-1){printf("插入位置参数错!");return0;}/*生成新结点由指针q批示*/if((q=(SLNode*)malloc(sizeof(SLNode)))==NULL)exit(1);q->data=x;//此段程序有一处错误p->next=q->next;/*给指针q->next赋值*/p->next=q;/*给指针p->next重新赋值*/return1;}intListDelete(SLNode*head,inti,DataType*x)/*删除带头结点单链表head数据元素ai(0≤i≤size-1)结点*//*删除结点数据元素域值由x带回。删除成功时返回1;失败返回0*/{SLNode*p,*s;intj;p=head;/*p指向首元结点*/j=-1;/*j初始为-1*/while(p->next!=NULL&&p->next->next!=NULL&&j<i-1)/*最后让指针p指向数据元素ai-1结点*/{p=p->next;j++;}if(j!=i-1){printf("插入位置参数错!");return0;}//此段程序有一处错误s=p->next;/*指针s指向数据元素ai结点*/*x=s->data;/*把指针s所指结点数据元素域值赋予x*/p->next=s->next;/*把数据元素ai结点从单链表中删除指*/free(s);/*释放指针s所指结点内存空间*/return1;}intListGet(SLNode*head,inti,DataType*x)/*取数据元素ai和删除函数类同,只是不删除数据元素ai结点*/{SLNode*p;intj;p=head;j=-1;while(p->next!=NULL&&j<i){p=p->next;j++;}if(j!=i){printf("取元素位置参数错!");return0;}//此段程序有一处错误*x=p->next;return1;}voidDestroy(SLNode**head){SLNode*p,*p1;p=*head;while(p!=NULL){p1=p;p=p->next;free(p1);}*head=NULL;}voidmain(void){SLNode*head;inti,x;ListInitiate(&head);/*初始化*/for(i=0;i<10;i++){if(ListInsert(head,i,i+1)==0)/*插入10个数据元素*/{printf("错误!\n");return;}}if(ListDelete(head,4,&x)==0)/*删除数据元素5*/{printf("错误!\n");return;}for(i=0;i<ListLength(head);i++){if(ListGet(head,i,&x)==0)/*取元素*/{printf("错误!\n");return;}elseprintf("%d",x);/*显示数据元素*/}Destroy(&head);}三、实验任务1.改正上述程序中错误(必作)。2.编写合并函数,将两个有序单链表合并成一种有序单链表(选作)。3.完毕实验报告撰写。

实验三、栈实现及应用一、实验目1.掌握栈存储表达和实现2.掌握栈基本操作实现。3.掌握栈在解决实际问题中应用。二、实验规定问题描述:编写程序实现算术表达式求值,即验证某算术表达式对的性,若对的,则计算该算术表达式值。重要功能描述如下:1、从键盘上输入表达式。2、分析该表达式与否合法。3、若上述解决过程中没有发现错误,则以为该表达式合法,计算并打印解决成果。三、重要功能函数参照程序中重要包括下面几种功能函数:voidinitstack():初始化堆栈intMake_str():语法检查intpush_operate(intoperate):将操作码压入堆栈intpush_num(doublenum):将操作数压入堆栈intprocede(intoperate):解决操作码intchange_opnd(intoperate):将字符型操作码转换成优先级intpush_opnd(intoperate):将操作码压入堆栈intpop_opnd():将操作码弹出堆栈intcaculate(intcur_opnd):简朴计算+,-,*,/doublepop_num():弹出操作数四、实验任务认真阅读与理解实验内容详细规定,参照教材有关章节,结合实验内容规定,编写实验程序并上机调试与测试,完毕实验报告撰写。

实验四、队列实现及应用一、实验目1.掌握队列存储表达和实现。2.掌握队列基本操作实现。3.掌握队列在解决实际问题中应用。二、实验规定运用队列模仿服务台前排队现象问题。问题描述:某银行有一种客户办理业务站,在单位时间内随机地有客户到达,设每位客户业务办理时间是某个范畴随机值。设只有一种窗口,一位业务人员,规定程序模仿记录在设定期间内,业务人员总空闲时间和客户平均等待时间。假定模仿数据已按客户到达先后顺序依次存于某个文本数据文献中,相应每位客户有两个数据:到达时间和需要办理业务时间。三、实验任务认真阅读与理解实验内容详细规定,参照教材有关章节,结合实验内容规定,编写实验程序并上机调试与测试,完毕实验报告撰写。

实验五、二叉树操作及应用实验目掌握二叉树定义、构造特性,以及各种存储构造特点及使用范畴,各种遍历算法。掌握用指针类型描述、访问和解决二叉树运算。掌握前序或中序非递归遍历算法。实验规定有如下二叉树:∧∧AB∧C∧D∧E∧∧F∧∧G∧根程序代码给出了该二叉树链式存储构造建立、前序、中序、后序遍历算法,同步也给出了查询“E”与否在二叉树里代码。代码有三处错误,有标记,属于逻辑错误,对照书中代码仔细分析后,请修改了在电脑里运营。#include<stdlib.h>#include<stdio.h>typedefcharDataType;typedefstructNode{DataTypedata;/*数据域*/structNode*leftChild;/*左子树指针*/structNode*rightChild;/*右子树指针*/}BiTreeNode;/*结点构造体定义*//*初始化创立二叉树头结点*/voidInitiate(BiTreeNode**root){*root=(BiTreeNode*)malloc(sizeof(BiTreeNode));(*root)->leftChild=NULL;(*root)->rightChild=NULL;}voidDestroy(BiTreeNode**root){if((*root)!=NULL&&(*root)->leftChild!=NULL)Destroy(&(*root)->leftChild);if((*root)!=NULL&&(*root)->rightChild!=NULL)Destroy(&(*root)->rightChild);free(*root);}/*若当前结点curr非空,在curr左子树插入元素值为x新结点*//*原curr所指结点左子树成为新插入结点左子树*//*若插入成功返回新插入结点指针,否则返回空指针*/BiTreeNode*InsertLeftNode(BiTreeNode*curr,DataTypex){BiTreeNode*s,*t;if(curr==NULL)returnNULL;t=curr->leftChild;/*保存原curr所指结点左子树指针*/s=(BiTreeNode*)malloc(sizeof(BiTreeNode));s->data=x;s->leftChild=t;/*新插入结点左子树为原curr左子树*/s->rightChild=NULL;curr->leftChild=s;/*新结点成为curr左子树*/returncurr->leftChild;/*返回新插入结点指针*/}/*若当前结点curr非空,在curr右子树插入元素值为x新结点*//*原curr所指结点右子树成为新插入结点右子树*//*若插入成功返回新插入结点指针,否则返回空指针*/BiTreeNode*InsertRightNode(BiTreeNode*curr,DataTypex){BiTreeNode*s,*t;if(curr==NULL)returnNULL;t=curr->rightChild;/*保存原curr所指结点右子树指针*/s=(BiTreeNode*)malloc(sizeof(BiTreeNode));s->data=x;s->rightChild=t;/*新插入结点右子树为原curr右子树*/s->leftChild=NULL;curr->rightChild=s;/*新结点成为curr右子树*/returncurr->rightChild;/*返回新插入结点指针*/}voidPreOrder(BiTreeNode*t,voidvisit(DataTypeitem))//使用visit(item)函数前序遍历二叉树t{if(t!=NULL){//此小段有一处错误visit(t->data);PreOrder(t->rightChild,visit);PreOrder(t->leftChild,visit);}}voidInOrder(BiTreeNode*t,voidvisit(DataTypeitem))//使用visit(item)函数中序遍历二叉树t{if(t!=NULL){//此小段有一处错误InOrder(t->leftChild,visit);InOrder(t->rightChild,visit);visit(t->data);}}voidPostOrder(BiTreeNode*t,voidvisit(DataTypeitem))//使用visit(item)函数后序遍历二叉树t{if(t!=NULL){//此小段有一处错误visit(t->data);PostOrder(t->leftChild,visit);PostOrder(t->rightChild,visit);}}voidVisit(DataTypeitem){printf("%c",item);}BiTreeNode*Search(BiTreeNode*root,DataTypex)//需找元素x与否在二叉树中{BiTreeNode*find=NULL;if(root!=NULL){if(root->data==x)find=root;else{find=Search(root->leftChild,x);if(find==NULL)find=Search(root->rightChild,x);}}returnfind;}voidmain(void){BiTreeNode*root,*p,*pp,*find;charx='E';Initiate(&root);p=InsertLeftNode(root,'A');p=InsertLeftNode(p,'B');p=InsertLeftNode(p,'D');p=InsertRightNode(p,'G');p=InsertRightNode(root->leftChild,'C');pp=p;InsertLeftNode(p,'E');InsertRightNode(pp,'F');printf("前序遍历:");PreOrder(root->leftChild,Visit);printf("\n中序遍历:");InOrder(root->leftChild,Visit);printf("\n后序遍历:");PostOrder(root->leftChild,Visit);find=Search(root,x);if(find!=NULL)printf("\n数据元素%c在二叉树中\n",x);elseprintf("\n数据元素%c不在二叉树中\n",x);Destroy(&root);}实验任务:1.改正程序错误(必作)。2.编写二叉树前序(或中序)非递归遍历算法并进行测试(选作)。3.完毕实验报告撰写。

实验六、图遍历操作及应用一、实验目掌握有向图和无向图概念;掌握邻接矩阵和邻接链表建立图存储构造;掌握DFS及BFS对图遍历操作;理解图构造在人工智能、工程等领域广泛应用。实验规定采用邻接矩阵和邻接链表作为图存储构造,完毕有向图和无向图DFS和BFS操作。本实验给出了示例程序,其中共有4处错误,错误段均有标记,属于逻辑错误。请认真理解程序,修改程序代码,并在电脑上调试运营。DFS和BFS基本思想深度优先搜索法DFS基本思想:从图G中某个顶点Vo出发,一方面访问Vo,然后选取一种与Vo相邻且没被访问过顶点Vi访问,再从Vi出发选取一种与Vi相邻且没被访问过顶点Vj访问,……依次继续。如果当前被访问过顶点所有邻接顶点都已被访问,则回退到已被访问顶点序列中最后一种拥有未被访问相邻顶点顶点W,从W出发按同样办法向前遍历。直到图中所有顶点都被访问。广度优先算法BFS基本思想:从图G中某个顶点Vo出发,一方面访问Vo,然后访问与Vo相邻所有未被访问过顶点V1,V2,……,Vt;再依次访问与V1,V2,……,Vt相邻起且未被访问过所有顶点。如此继续,直到访问完图中所有顶点。V6V4V6V4V5V7V2V3V1V0Vo图G示例邻接矩阵作为存储构造程序示例#include"stdio.h"#include"stdlib.h"#defineMaxVertexNum100//定义最大顶点数typedefstruct{charvexs[MaxVertexNum];//顶点表intedges[MaxVertexNum][MaxVertexNum];

//邻接矩阵,可看作边表intn,e;//图中顶点数n和边数e}MGraph;//用邻接矩阵表达图类型//=========建立邻接矩阵=======voidCreatMGraph(MGraph*G){inti,j,k;chara;printf("InputVertexNum(n)andEdgesNum(e):");scanf("%d,%d",&G->n,&G->e);//输入顶点数和边数scanf("%c",&a);printf("InputVertexstring:");for(i=0;i<G->n;i++){scanf("%c",&a);G->vexs[i]=a;//读入顶点信息,建立顶点表}for(i=0;i<G->n;i++)for(j=0;j<G->n;j++)G->edges[i][j]=0;//初始化邻接矩阵printf("Inputedges,CreatAdjacencyMatrix\n");for(k=0;k<G->e;k++){//读入e条边,建立邻接矩阵scanf("%d%d",&i,&j);//输入边(Vi,Vj)顶点序号G->edges[i][j]=1;G->edges[j][i]=1;//若为无向图,矩阵为对称矩阵;若建立有向图,去掉该条语句}}//=========定义标志向量,为全局变量=======typedefenum{FALSE,TRUE}Boolean;Booleanvisited[MaxVertexNum];//========DFS:深度优先遍历递归算法======voidDFSM(MGraph*G,inti){//以Vi为出发点对邻接矩阵表达图G进行DFS搜索,邻接矩阵是0,1矩阵intj;printf("%c",G->vexs[i]);//访问顶点Vivisited[i]=TRUE;//置已访问标志for(j=0;j<G->n;j++)//依次搜索Vi邻接点if(G->edges[i][j]==1&&!visited[j])DFSM(G,j);//(Vi,Vj)∈E,且Vj未访问过,故Vj为新出发点}voidDFS(MGraph*G){\\此段代码有一处错误inti;for(i=0;i<G->n;i++)visited[i]=FALSE;//标志向量初始化for(i=0;i<G->n;i++)if(!visited[i])//Vi未访问过DFS(G,i);//以Vi为源点开始DFS搜索}//===========BFS:广度优先遍历=======voidBFS(MGraph*G,intk){//以Vk为源点对用邻接矩阵表达图G进行广度优先搜索inti,j,f=0,r=0;intcq[MaxVertexNum];//定义队列for(i=0;i<G->n;i++)visited[i]=FALSE;//标志向量初始化for(i=0;i<G->n;i++)cq[i]=-1;//队列初始化printf("%c",G->vexs[k]);//访问源点Vkvisited[k]=TRUE;cq[r]=k;//Vk已访问,将其入队。注意,事实上是将其序号入队while(cq[f]!=-1){//队非空则执行i=cq[f];f=f+1;//Vf出队for(j=0;j<G->n;j++)//依次Vi邻接点Vjif(G->edges[i][j]==1&&!visited[j]){//Vj未访问\\如下三行代码有一处错误printf("%c",G->vexs[j]);//访问Vjvisited[j]=FALSE;

r=r+1;cq[r]=j;//访问过Vj入队}}}//==========main=====voidmain(){inti;MGraph*G;G=(MGraph*)malloc(sizeof(MGraph));//为图G申请内存空间CreatMGraph(G);//建立邻接矩阵printf("PrintGraphDFS:");DFS(G);//深度优先遍历printf("\n");printf("PrintGraphBFS:");BFS(G,3);//以序号为3顶点开始广度优先遍历printf("\n");}执行顺序:InputVertexNum(n)andEdgesNum(e):8,9InputVertexstring:01234567Inputedges,CreatAdjacencyMatrix010213142526374756PrintGraphDFS:01374256PrintGraphBFS:31704256邻接链表作为存储构造程序示例#include"stdio.h"#include"stdlib.h"#defineMaxVertexNum50//定义最大顶点数typedefstructnode{//边表结点intadjvex;//邻接点域structnode*next;//链域}EdgeNode;typedefstructvnode{//顶点表结点charvertex;//顶点域EdgeNode*firstedge;//边表头指针}VertexNode;typedefVertexNodeAdjList[MaxVertexNum];//AdjList是邻接表类型typedefstruct{AdjListadjlist;//邻接表intn,e;//图中当前顶点数和边数}ALGraph;//图类型//=========建立图邻接表=======voidCreatALGraph(ALGraph*G){inti,j,k;chara;EdgeNode*s;//定义边表结点printf("InputVertexNum(n)andEdgesNum(e):");scanf("%d,%d",&G->n,&G->e);//读入顶点数和边数scanf("%c",&a);printf("InputVertexstring:");for(i=0;i<G->n;i++)//建立边表{scanf("%c",&a);G->adjlist[i].vertex=a;//读入顶点信息G->adjlist[i].firstedge=NULL;//边表置为空表}printf("Inputedges,CreatAdjacencyList\n");for(k=0;k<G->e;k++){//建立边表scanf("%d%d",&i,&j);//读入边(Vi,Vj)顶点对序号s=(EdgeNode*)malloc(sizeof(EdgeNode));//生成边表结点s->adjvex=j;//邻接点序号为js->next=G->adjlist[i].firstedge;G->adjlist[i].firstedge=s;//将新结点*S插入顶点Vi边表头部s=(EdgeNode*)malloc(sizeof(EdgeNode));s->adjvex=i;//邻接点序号为is->next=G->adjlist[j].firstedge;G->adjlist[j].firstedge=s;//将新结点*S插入顶点Vj边表头部}}//=========定义标志向量,为全局变量=======typedefenum{FALSE,TRUE}Boolean;Booleanvisited[MaxVertexNum];//========DFS:深度优先遍历递归算法======voidDFSM(ALGraph*G,inti){//以Vi为出发点对邻接链表表达图G进行DFS搜索EdgeNode*p;printf("%c",G->adjlist[i].vertex);//访问顶点Vivisited[i]=TRUE;//标记Vi已访问p=G->adjlist[i].firstedge;//取Vi边表头指针while(p){//依次搜索Vi邻接点Vj,这里j=p->adjvex\\如下3行代码有一处错误if(!visited[p->adjvex])//若Vj尚未被访问DFS(G,p->adjvex);//则以Vj为出发点向纵深搜索p=p->next;//找Vi下一种邻接点}}voidDFS(ALGraph*G){inti;for(i=0;i<G->n;i++)visited[i]=FALSE;//标志向量初始化for(i=0;i<G->n;i++)if(!visited[i])//Vi未访问过

DFSM(G,i);//以Vi为源点开始DFS搜索

}

//==========BFS:广度优先遍历=========voidBFS(ALGraph*G,intk)

{//以Vk为源点对用邻接链表表达图G进行广度优先搜索inti,f=0,r=0;

EdgeNode*p;

intcq[MaxVertexNum];//定义FIFO队列

for(i=0;i<G->n;i++)visited[i]=FALSE;//标志向量初始化for(i=0;i<=G->n;i++)cq[i]=-1;//初始化标志向量printf("%c",G->adjlist[k].vertex);//访问源点Vkvisited[k]=TRUE;cq[r]=k;//Vk已访问,将其入队。注意,事实上是将其序号入队while(cq[f]!=-1){队列非空则执行i=cq[f];f=f+1;//Vi出队p=G->adjlist[i].firstedge;//取Vi边表头指针while(p){//依次搜索Vi邻接点Vj(令p->adjvex=j)if(!visited[p->adjvex]){//若Vj未访问过printf("%c",G->adjlist[p->adjvex].vertex);//访问Vjvisited[p->adjvex]=TRUE;//

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论