数据库代码

#include

#include

#define MAX_VERTEX_NUM 30 /*无向图最大顶点数*/

#define MAX_LEN 20 /*数据最大长度 */

int visited[MAX_VERTEX_NUM]; /*全局变量,访问标志数组 */

typedef struct EBox /*边结点类型*/

{

int mark; /*访问标记 */

int ivex,jvex; /*该边依附的两个顶点位置*/

struct EBox *ilink,*jlink; /*分别指向依附这两个顶点的下一条边 */

}EBox;

typedef struct VexBox /*顶点结点类型*/

{

char data[MAX_LEN];

EBox *fistedge; /*指向第一条依附该顶点的边*/

}VexBox;

typedef struct

{

VexBox list[MAX_VERTEX_NUM];

int vexnum,edgenum; /*无向图当前顶点数和边数 */

}AMLGraph;

void CreateGraph(AMLGraph *p) /*创建无向图 */

{

int i,j,k;

EBox *q;

printf("\n\t\t\t请输入图的结点个数和边的个数:"); /*输入图的结点数和边数 */

scanf("%d%d",&p->vexnum,&p->edgenum);

for(i=1;ivexnum;i++)

{ printf("\n\t\t\t请输入结点%d的名称:",i); /*输入顶点数据信息*/

scanf("%s",p->list[i].data);

p->list[i].fistedge=NULL; /*初始化指针*/

}

for(k=0;k

edgenum;k++) /*输入各边并构造多重链表*/

{

printf("\n\t\t\t请输入互相有关联的两个结点:");

scanf("%d,%d",&i,&j);

q=(EBox *)malloc(sizeof(EBox));

q->mark=0; /*对边结点赋值*/

q->ivex=i;

q->ilink=p->list[i].fistedge;

q->jvex=j;

q->jlink=p->list[j].fistedge;

p->list[i].fistedge=p->list[j].fistedge=q; /*完成边在链头的插入*/

}

printf("\n");

}

void DFS(AMLGraph *p, int v)

{ /*对第v个顶点的深度优先遍历 */

int w;

EBox *q;

visited[v]=1; /*标记已访问结点 */

printf("%s ",p->list[v].data);

for(q=p->list[v].fistedge;q!=NULL;)

{

if(q->ivex==v)

{w=q->jvex; q=q->jlink;}

else

{w=q->ivex; q=q->ilink;}

if(!visited[w]) DFS(p,w); /*对尚未访问的点调用DFS*/

}

}

void DFSTraverse(AMLGraph *p,int n)

{ /*深度优先遍历 */

int v;

printf("\n\t\t\t");

for(v=1;vvexnum;v++)

visited[v]=0; /*

访问标志数组初始化*/

DFS(p,n); /*对起始顶点调用DFS*/

for(v=1;vvexnum;v++)

if(!visited[v]) DFS(p,v); /*对尚未访问的顶点调用DFS*/

printf("\n");

}

void BFS(AMLGraph *p,int v)

{ /*对第v个顶点进行广度优先遍历*/

int u,w;

EBox *x;

typedef struct queue

{

int m;

struct queue *next;

}Q; /*辅助队列Q*/

Q *head,*tail,*q;

head=tail=(Q *)malloc(sizeof(Q));

tail->next=NULL;

visited[v]=1; /*标记已访问结点 */

printf("%s ",p->list[v].data);

tail->m=v; /*v入队列 */

tail->next=(Q *)malloc(sizeof(Q));

tail=tail->next;

tail->next=NULL;

while(head!=tail)

{

q=head;

head=head->next;

u=q->m; /*对头元素出队并置为u*/

free(q);

for(x=p->list[u].fistedge;x!=NULL;)

{

if(x->ivex==u)

{w=x->jvex;x=x->ilink;}

else

{w=x->ivex;x=x->jlink;}

if(!visited[w])

{

visited[w]=1;

printf("%s ",p->list[w].data);

tail->m=w; /*入队列*/

tail=tail->next=(Q *)malloc(sizeof(Q));

tail->next=NULL;

} /*if*/

} /*for */

} /*while*/

} /*BFS*/

void BFSTraverse(AMLGraph *p,int n)

{

printf("\n\t\t\t"); /*广度优先遍历*/

int v;

for(v=1;vvexnum;v++)

visited[v]=0; /*访问标志数组初始化*/

BFS(p,n); /*对起始顶点调用BFS*/

for(v=1;vvexnum;v++)

if(!visited[v]) BFS(p,v);

printf("\n"); /*对未访问顶点调用BFS*/

}

main() /*主函数 */

{

int x,n;

AMLGraph graph,*p;

p=&graph;

printf("\t\t\t****** 图的深度和广度优先遍历 *******\n");

while(1)

{

printf("\t\t\t ~~~~~~~~ 功能菜单 ~~~~~~~ \n");

printf("\t\t\t*********************************************\n");

printf("\t\t\t* 1.创建图 *\n");

printf("\t\t\t* 2.深度优先遍历图 *\n");

printf("\t\t\t* 3.广度优先遍历图 *\n");

printf("\t\t\t* 4.退出系统

*\n");

printf("\t\t\t*********************************************\n");

printf("\n\t\t\t请输入选择的功能编号(1-4):");

scanf("%d",&n);

if(n4)

{

printf("\n\n\t\t\t你输入的功能号错误,请重新输入,按Enter键继续!!");

getchar();

getchar();

continue;

}

switch(n)

{

case 1:

CreateGraph(p);break;

case 2: {

printf("\n\t\t\t请输入起始遍历结点:");

scanf("%d",&x);

printf("\n\t\t\t深度优先遍历结果为:");

printf("\n");

DFSTraverse(p,x);

printf("\n");

} break;

case 3: {

printf("\n\t\t\t请输入起始遍历结点:");

scanf("%d",&x);

printf("\n\t\t\t广度优先遍历结果为:");

printf("\n");

BFSTraverse(p,x);

printf("\n");

} break;

case 4: printf("\n\n\t\t\t谢谢你的使用!\n\n\n");

exit(0);

}/*switch */

} /*while */

} /*main */

#include

#include

#define MAX_VERTEX_NUM 30 /*无向图最大顶点数*/

#define MAX_LEN 20 /*数据最大长度 */

int visited[MAX_VERTEX_NUM]; /*全局变量,访问标志数组 */

typedef struct EBox /*边结点类型*/

{

int mark; /*访问标记 */

int ivex,jvex; /*该边依附的两个顶点位置*/

struct EBox *ilink,*jlink; /*分别指向依附这两个顶点的下一条边 */

}EBox;

typedef struct VexBox /*顶点结点类型*/

{

char data[MAX_LEN];

EBox *fistedge; /*指向第一条依附该顶点的边*/

}VexBox;

typedef struct

{

VexBox list[MAX_VERTEX_NUM];

int vexnum,edgenum; /*无向图当前顶点数和边数 */

}AMLGraph;

void CreateGraph(AMLGraph *p) /*创建无向图 */

{

int i,j,k;

EBox *q;

printf("\n\t\t\t请输入图的结点个数和边的个数:"); /*输入图的结点数和边数 */

scanf("%d%d",&p->vexnum,&p->edgenum);

for(i=1;ivexnum;i++)

{ printf("\n\t\t\t请输入结点%d的名称:",i); /*输入顶点数据信息*/

scanf("%s",p->list[i].data);

p->list[i].fistedge=NULL; /*初始化指针*/

}

for(k=0;k

edgenum;k++) /*输入各边并构造多重链表*/

{

printf("\n\t\t\t请输入互相有关联的两个结点:");

scanf("%d,%d",&i,&j);

q=(EBox *)malloc(sizeof(EBox));

q->mark=0; /*对边结点赋值*/

q->ivex=i;

q->ilink=p->list[i].fistedge;

q->jvex=j;

q->jlink=p->list[j].fistedge;

p->list[i].fistedge=p->list[j].fistedge=q; /*完成边在链头的插入*/

}

printf("\n");

}

void DFS(AMLGraph *p, int v)

{ /*对第v个顶点的深度优先遍历 */

int w;

EBox *q;

visited[v]=1; /*标记已访问结点 */

printf("%s ",p->list[v].data);

for(q=p->list[v].fistedge;q!=NULL;)

{

if(q->ivex==v)

{w=q->jvex; q=q->jlink;}

else

{w=q->ivex; q=q->ilink;}

if(!visited[w]) DFS(p,w); /*对尚未访问的点调用DFS*/

}

}

void DFSTraverse(AMLGraph *p,int n)

{ /*深度优先遍历 */

int v;

printf("\n\t\t\t");

for(v=1;vvexnum;v++)

visited[v]=0; /*

访问标志数组初始化*/

DFS(p,n); /*对起始顶点调用DFS*/

for(v=1;vvexnum;v++)

if(!visited[v]) DFS(p,v); /*对尚未访问的顶点调用DFS*/

printf("\n");

}

void BFS(AMLGraph *p,int v)

{ /*对第v个顶点进行广度优先遍历*/

int u,w;

EBox *x;

typedef struct queue

{

int m;

struct queue *next;

}Q; /*辅助队列Q*/

Q *head,*tail,*q;

head=tail=(Q *)malloc(sizeof(Q));

tail->next=NULL;

visited[v]=1; /*标记已访问结点 */

printf("%s ",p->list[v].data);

tail->m=v; /*v入队列 */

tail->next=(Q *)malloc(sizeof(Q));

tail=tail->next;

tail->next=NULL;

while(head!=tail)

{

q=head;

head=head->next;

u=q->m; /*对头元素出队并置为u*/

free(q);

for(x=p->list[u].fistedge;x!=NULL;)

{

if(x->ivex==u)

{w=x->jvex;x=x->ilink;}

else

{w=x->ivex;x=x->jlink;}

if(!visited[w])

{

visited[w]=1;

printf("%s ",p->list[w].data);

tail->m=w; /*入队列*/

tail=tail->next=(Q *)malloc(sizeof(Q));

tail->next=NULL;

} /*if*/

} /*for */

} /*while*/

} /*BFS*/

void BFSTraverse(AMLGraph *p,int n)

{

printf("\n\t\t\t"); /*广度优先遍历*/

int v;

for(v=1;vvexnum;v++)

visited[v]=0; /*访问标志数组初始化*/

BFS(p,n); /*对起始顶点调用BFS*/

for(v=1;vvexnum;v++)

if(!visited[v]) BFS(p,v);

printf("\n"); /*对未访问顶点调用BFS*/

}

main() /*主函数 */

{

int x,n;

AMLGraph graph,*p;

p=&graph;

printf("\t\t\t****** 图的深度和广度优先遍历 *******\n");

while(1)

{

printf("\t\t\t ~~~~~~~~ 功能菜单 ~~~~~~~ \n");

printf("\t\t\t*********************************************\n");

printf("\t\t\t* 1.创建图 *\n");

printf("\t\t\t* 2.深度优先遍历图 *\n");

printf("\t\t\t* 3.广度优先遍历图 *\n");

printf("\t\t\t* 4.退出系统

*\n");

printf("\t\t\t*********************************************\n");

printf("\n\t\t\t请输入选择的功能编号(1-4):");

scanf("%d",&n);

if(n4)

{

printf("\n\n\t\t\t你输入的功能号错误,请重新输入,按Enter键继续!!");

getchar();

getchar();

continue;

}

switch(n)

{

case 1:

CreateGraph(p);break;

case 2: {

printf("\n\t\t\t请输入起始遍历结点:");

scanf("%d",&x);

printf("\n\t\t\t深度优先遍历结果为:");

printf("\n");

DFSTraverse(p,x);

printf("\n");

} break;

case 3: {

printf("\n\t\t\t请输入起始遍历结点:");

scanf("%d",&x);

printf("\n\t\t\t广度优先遍历结果为:");

printf("\n");

BFSTraverse(p,x);

printf("\n");

} break;

case 4: printf("\n\n\t\t\t谢谢你的使用!\n\n\n");

exit(0);

}/*switch */

} /*while */

} /*main */


相关内容

  • 在全国组织机构代码工作会议上的讲话稿
  • 在全国组织机构代码工作会议上的讲话稿 同志们: 今年全国组织机构代码工作会在山东召开,刚才山东局的丛局长发表了热情洋溢的讲话,介绍了山东省的一些基本情况.使大家增长了知识,山东省是中华民族文化的发源地.文化底蕴深厚.这几年来,山东的代码工作在省局的领导下做得也不错,投入大.制度建设也比较规范,所以效 ...

  • 代码构建论文
  • 代码构建技术综述 作者姓名:龚江鹏 作者学号:09060119 作者专业及班级:计算机科学与技术专业(1)班 摘 要:一切自动化是人类的一个梦想,人们为了实现这个梦想不断努力.人们利用计算机软件与硬件实现办公自动化.管理自动化的同时,也在考虑程序代码的自动生成. 关 键 词:代码构建:未来趋势:框架 ...

  • 林地变更细则(代码见附件3)(1份)
  • 附件3 贵州省2013年林地年度变更调查试点工作 实施细则(试行) 贵州省林业厅 二〇一三年七月 目 录 第一章 总则 . ........................................................................................ ...

  • 陕西省中小学教职工信息管理系统使用说明书
  • 目 录 1系统概述 ................................................................... 2 2数据流程 ................................................................ ...

  • 第2章 打下坚实基础--基本语法
  • 第2章 从本章开始,我们将全面介绍PHP的基础知识.本章的主要内容包括:PHP的数据类型.类型之间的转换.PHP的变量和常量.表达式和运算符,以及流程控制语句. 2.1 从" Hello World"开始 PHP语法入门 在开始学习PHP语言之前,我们先来看一个最简单的PHP应用 ...

  • 15款代码生成器 | 帕兰映像
  • 15款代码生成器, 从弱智的色彩渐变代码生成器, 到CSS生成器, 再到适合开发人员的.NET代码生成器. Cssronnd – 在线生成css圆角代码,可以设置圆角半径.包含文字.圆角颜色.背景颜色.文字颜色以及宽度.支持代码下载(其中包括4个圆角图片). CSSTXT – 在线生成css文字代码 ...

  • 中国残疾人事业业务数据统计管理系统
  • <中国残疾人事业业务数据统计管理系统> 软件操作手册 中国残疾人联合会信息中心 二〇〇九年十月 目 录 第一章 中国残疾人事业业务数据统计管理系统介绍与安装 ................... - 1 - 一.系统介绍 ................................ ...

  • 图书馆信息管理系统
  • 图书馆信息管理系统 数据库的概念 数据库是一种存储数据并对数据进行操作的工具.数据库的作用在于组织和表达信息,简而言之,数据库就是信息的集合.计算机的数据库可以分为两类:非关系数据库(flat-file )和关系数据库(relational ).关系数据库中包含了多个数据表的信息,数据库含有各个不同 ...

  • 电子报表系统
  • 电子报表系统 报表业务流程图 一.操作界面 1. 菜单栏:用菜单中的菜单命令可以完成对报表各种操作. 系统为各菜单设置了热键,用热键可以快捷地执行菜单命令,如按+键,可以打开[文件]菜单. 2. 工具栏:主要有常用工具栏.格式工具栏.绘图工具栏和编辑栏,工具中包括一些编制报表过程中常用的命令按钮.用 ...

  • 全员人口个案管理信息系统基础数据结构
  • 全员人口个案管理信息系统基础数据结构 与分类代码(试行) 一.数据结构 (一)命名规则 数据结构表名称和字段名称均同时使用中.英文两种格式.数据结构表中文名称为‚户人口基本情况表‛,英文名称为‚WISTable0‛.字段中文名称直接使用数据项名称,英文名称采用‚'WISField '+'代码'‛格式 ...