`
ye_haiqiang
  • 浏览: 85392 次
  • 性别: Icon_minigender_1
  • 来自: 福州
社区版块
存档分类
最新评论

实验5 图的操作

 
阅读更多

实验5 图的操作

一、实验目的

1. 熟悉图的存储结构;

2.熟悉图的创建操作;

3.熟悉图的遍历操作。

三、实验要求

1..每个同学必须独立完成;

2.程序中的开头部分必须对本程序的总体功能进行注释;程序中每个函数段必须要有注释说明该函数的功能或作用;

3.上机进行调试和修改并填写实验报告;

4.实验报告中的源程序必须调试通过。

5.在体会中描述如下内容:

1)对算法与程序的区别上的体会。

2)本次实验过程的体会,是否自己独立完成?最大的困难是什么?自己准备如何解决这个困难?

6.提交实验报告(报告中包含关键源代码)

实验内容

1、用邻接表结构实现如图所示无向图的存储;

2、在第1步骤基础上实现该无向图的深度优先遍历;输出遍历序列;

3、在第1步骤基础上实现该无向图的广度优先遍历;输出遍历序列;

 

 

 

参考代码:

 

#include "stdio.h"
#include "conio.h"
#define MaxVertexNum 100
#define MAXSIZE 100
typedef struct
{
    int data[MAXSIZE];
    int front;
    int rear;
}SeqQueue;
typedef char VertexType;
typedef enum{FALSE,TRUE}Boolean;
Boolean visited[MaxVertexNum];
typedef char elemtype;
/*边结点*/
typedef struct node
{
    int adjvex;/*邻接点域*/
    struct node *nextedge;/*链域*/
}EdgeNode;
/*顶点表结点*/
typedef struct vnode
{
    VertexType vertex; /*顶点域*/
    EdgeNode *firstedge; /*边表头指针*/
}VertexNode;
typedef VertexNode AdjList[MaxVertexNum];/*AdjList是邻接表类型*/
/*
    对于简单的应用,无须定义此类型,可直接使用AdjList类型
*/
typedef struct
{
    AdjList adjlist;/*邻接表*/
    int n,e;        /*当前结点数和边数*/
    int kind;       /*图的种类标志*/
}ALGraph;
/*建立无向图的邻接表*/
void CreateALGraPh(ALGraph *G1)
{
    int i,j,k;
    EdgeNode *s;
    /*读入顶点数和边数*/
    printf("please input vertices: ");
    scanf("%d",&G1->n);getchar();
    printf("please input Vertex edge number: ");
    scanf("%d",&G1->e);getchar();

    /*建立顶点表*/
    for(i=0;i<G1->n;i++)
    {
        printf("please input the %dth Vertex\n",i+1);
        scanf("%c",&G1->adjlist[i].vertex);getchar(); /*读入顶点信息*/
        G1->adjlist[i].firstedge=NULL;    /*边表置为空表*/
    }
    printf("Please enter no to chart the relationship between vertices.the style is vi,vj\n\n ");
    /*建立边表*/
    for(k=0;k<G1->e;k++)
    {
        printf("the %dth is: ",k+1);
        scanf("%d,%d",&i,&j);            /*读入边(vi,vj)的顶点对序号*/
        s=(EdgeNode *)malloc(sizeof(EdgeNode)); /*生成边表结点*/
        s->adjvex=j;/*邻接点序号为j*/
        s->nextedge=G1->adjlist[i].firstedge;
        G1->adjlist[i].firstedge=s;/*将新结点*s插入顶点vi的边表头部*/

        s=(EdgeNode *)malloc(sizeof(EdgeNode));
        s->adjvex=i;/*邻接点序号为i*/
        s->nextedge=G1->adjlist[j].firstedge;
        G1->adjlist[j].firstedge=s; /*将新结点*s插入顶点vj的边表头部*/
    }
}
/*邻接表表示的深度优先遍历*/
void DFS(ALGraph *G1,int i)
{

    EdgeNode *p;
    printf("%c ",G1->adjlist[i].vertex);/*访问顶点vi*/
    visited[i]=TRUE;/*标记vi已访问*/
    p=G1->adjlist[i].firstedge;   /*取vi边表的头指针*/
    while(p)
    {
        if(!visited[p->adjvex]) /*若vi尚未被访问,则以vj为出发点向纵深搜索*/
        {
           DFS(G1,p->adjvex);
        }
        p=p->nextedge;/*找vi的下一邻接点*/
    }

}
/*邻接表表示的广度优先遍历*/
void BFS(ALGraph *G,int k)
{
    int i;
    SeqQueue *Q;
    EdgeNode *p;
    /*初始队列*/
    Q=(SeqQueue *)malloc(sizeof(SeqQueue));
    Q->front=Q->rear=0;

    printf("%c ",G->adjlist[k].vertex);
    visited[k]=TRUE;

    /*入队*/
    Q->data[Q->rear]=k;
    Q->rear=(Q->rear+1)%MAXSIZE;
    Q->rear++;

    while(Q->rear)
    {
        i=Q->data[Q->front];
        Q->front=(Q->front+1)%MAXSIZE;
        Q->rear--;

        p=G->adjlist[i].firstedge;
        while(p)
        {
            if(!visited[p->adjvex])
            {
                printf("%c ",G->adjlist[p->adjvex].vertex);
                visited[p->adjvex]=TRUE;
                Q->data[Q->rear]=p->adjvex;
                Q->rear=(Q->rear+1)%MAXSIZE;
                Q->rear++;

            }
            p=p->nextedge;
        }
    }
}
executeBFS(ALGraph *G)
{
    int i;
    for(i=0;i<G->n;i++)/*将图G的所有顶点设置未访问过标记 */
        visited[i]=FALSE;
    for(i=0;i<G->n;i++)/*对图G调用bfs函数进行广度优先搜索*/
        if(!visited[i])
            BFS(G,i);
}
main()
{
    ALGraph *G1;
    int i;
    CreateALGraPh(&G1);
    printf("DFS\n");
    DFS(&G1,0);
    printf("\nBFS\n");
    executeBFS(&G1);
    getch();
}

 

 

 

 

 

分享到:
评论

相关推荐

    实验5_华工操作系统实验五_

    华工计科实验5,实现银行家算法,解决死锁,包含样例

    操作系统 PV操作 实验报告

    一个能够完整运行出来的PV操作的实验报告,然后实验报告的结构也很完整,实验目的,实验过程,甚至实验的结果也有截图,如果有小伙伴需要,尽管下载哦

    操作系统实验5

    操作系统实验教程中实验五,关于shell脚本编程,实验部分程序

    实验三:熟悉常用的HBase操作

    A.3实验三:熟悉常用的HBase操作 本实验对应第5章的内容。 A.3.1 实验目的 (1)理解HBase在Hadoop体系结构中的角色。(2)熟练使用HBase操作常用的 Shell命令。(3)熟悉HBase操作常用的 Java API。 A.3.2 实验平台 (1...

    Oracle数据库实验操作

    实验5:查看当前用户的所有表和视图 13 实验6:关于null值的问题 15 实验7:在列上起一个别名 15 实验8:在显示的时候去掉重复的行 16 实验9:显示表的部分行和部分列,使用where子句过滤出想要的行 18 实验10:使用...

    数据结构实验——图的基本操作

    一、实验目的 1、掌握图的存储方式 2、 掌握图的相关操作 二、实验内容 1、实现拓扑排序算法。

    实验5HFISO14443A操作.pdf

    实验5HFISO14443A操作.pdf

    HDU 杭电操作系统实验 (通过验收)

    包含实验内容:对应实验要求上的1/2/3/5实验,分别为setName/setNice,petree输出进程,模拟shell,进程通信,文件系统。包含全部实验源代码和详尽的word实验报告。同时包含在线PTA编程题目:进程模拟,模拟进程调度...

    黑龙江大学《操作系统》实验报告及源码C/C++编写

    有实验源码和实验报告,附有实验算法流程图。实验一:进程控制、实验二:分页式存储管理、实验三:文件与磁盘管理、实验四:进程调度。实验报告包含实验目的、实验内容、数据结构、实现算法及流程图、运行截图。能够...

    UNIX网络操作系统实验报告 广工

    来自广东工业大学 UNIX 网络操作系统 实验 报告 一、 实验目的 1. 掌握UNIX系统的目录和文件管理命令。 2. 掌握shell的输入输出重定向操作符。 3. 编写shell脚本文件,并调试、执行它。 二、 实验要求 1. 要求每人...

    操作系统的实验报告及程序5个

    存储管理实验·进程调度实验·文件管理实验·主存空间分配与回收·作业调度 其中包含5个操作系统实验,保证你的资源分不会白出。

    计算机操作系统实验(5个详细实验)

    计算机操作系统实验(5个详细实验),内包含5个实验,1.短进程优先 2.高响应比优先 2.先来先服务 3.内存分配 4.银行家算法 BUG较少,综合了网上的优秀代码,并进一步形成自己的代码。代码基本有注释,风格良好,能够...

    1操作系统实验五.docx

    使用信号量及P、V操作实现子进程之间通过共享内存通信的读写同步,如实验图5-1所示。要求如下: 生产者进程消费者进程A消费者进程B父进程sum 生产者进程 消费者进程A 消费者进程B 父进程 sum 实验图 5-1 请参考附件...

    大数据实验六实验报告:熟悉Hive的基本操作

    题目:实验六:熟悉Hive的基本操作 姓名:小猪猪 日期:2022/5/15 1、实验环境: 设备名称 LAPTOP-9KJS8HO6 处理器 Intel(R) Core(TM) i5-10300H CPU @ 2.50GHz 2.50 GHz 机带 RAM 16.0 GB (15.8 GB 可用) 主机操作...

    实验5 外部中断实验_keil_

    实验5 外部中断实验 实现代码完整版

    操作系统实验 操作系统实验报告 文件管理 进程管理等

    操作系统实验(含实验报告) 1、进程调度 2、作业调度 3、主存空间的分配与回收 4、文件系统 一、 实验目的 用高级语言编写和调试一个进程调度程序,以加深对进程的概念及进程调度算法的理解。 二、实验内容和要求...

    操作系统实验八 文件管理

    5、对文件的操作设计提供一套文件操作: CREATE建立文件; DELETE删除文件; OPEN打开文件; CLOSE关闭文件; READ读文件; WRITE写文件。 6、二级目录结构如下图所示。 用户名 用户文件目录地址 主文件...

    头歌Chcore操作系统实验.docx

    上海交通大学头歌实践教学平台操作系统Chcore实验二、三通关操作

    大数据实验5实验报告:MapReduce 初级编程实践

    林子雨大数据原理与技术第三版实验5实验报告 大数据技术与原理实验报告 MapReduce 初级编程实践 姓名: 实验环境:  操作系统:Linux(建议Ubuntu16.04);  Hadoop版本:3.2.2; 实验内容与完成情况: (一)...

    操作系统实验报告包含五个四个主要实验

    操作系统实验报告包含五个四个主要实验,linux操作系统基本命令使用及操作、C语言编程环境的使用、数据传送、存储管理等

Global site tag (gtag.js) - Google Analytics