学海网 文档下载 文档下载导航
设为首页 | 加入收藏
搜索 请输入内容:  
 导航当前位置: 文档下载 > 所有分类 > IT/计算机 > 计算机软件及应用 > 邻接表的创建和图的遍历

邻接表的创建和图的遍历

#include <stdio.h>
#include <stdlib.h>

#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define MAX_NUM 20

typedef int Status;
typedef int QElemType;
typedef char VexType;

/*
* 邻接表存储结构
*/
typedef struct EdgeNode
{
int adjvex; //顶点的位置
struct EdgeNode *next; //指向下一条边的指针
}EdgeNode, *EdgeLink;

typedef struct VexNode
{
VexType data; //顶点数据
EdgeNode *firstEdge; //指向第一条依附该顶点的边的指针
}VexNode, AdjList[MAX_NUM];

typedef struct
{
AdjList adjList;
int vexNum, edgeNum; //顶点数和边数
}ALGraph;

/*
* 队列存储结构(用于图的遍历)
*/
typedef struct QNode
{
QElemType data; //结点数据
struct QNode *next; //指向下一个结点
}QNode, *QueuePtr;

typedef struct
{
QueuePtr front; //队头指针
QueuePtr rear; //队尾指针
}LinkQueue;

/*
* 初始化队列
*/
Status InitQueue(LinkQueue *Q)
{
Q->front = Q->rear = (QueuePtr) malloc(sizeof(QNode));
if (!Q->front)
{
exit(OVERFLOW);
}
Q->front->next = NULL;
return OK;
}

/*
* 判断队列是否为空
*/
Status IsEmpty(LinkQueue Q)
{
if (Q.front->next == NULL)
{
return TRUE;
}
else
{
return FALSE;
}
}

/*
* 入队
*/
Status EnQueue(LinkQueue *Q, QElemType e)
{
QueuePtr p = (QueuePtr) malloc(sizeof(QNode));
if (!p)
{
exit(OVERFLOW);
}
p->data = e;
p->next = NULL;
Q->rear->next = p;
Q->rear = p;
return OK;
}

/*
* 出队
*/
Status DeQueue(LinkQueue *Q, QElemType *e)
{
QueuePtr p;
if (Q->front == Q->rear)
{
return ERROR;
}
p = Q->front->next;
*e = p->data;
Q->front->next = p->next;
if (Q->rear == p)
{
Q->rear = Q->front;
}
free(p);
return OK;
}

/*
* 创建图
*/
Status CreateGraph(ALGraph *G)
{
int i, j, k;
EdgeLink e;
printf("请输入顶点数目和边数:\n");
scanf("%d", &G->vexNum);
scanf("%d", &G->edgeNum);
getchar();
printf("请输入各顶点的数据:\n");
for (i = 0; i < G->vexNum; i++)
{
scanf("%c",&G->adjList[i].data);
if (G->adjList[i].data == '\n')
{
i--;
continue;
}
G->adjList[i].firstEdge = NULL;
}

printf("请依次输入边(Vi,Vj)的顶点序号:\n");
for (k = 0; k < G->edgeNum; k++)
{
scanf("%d", &i);
scanf("%d", &j);
e = (EdgeLink) malloc(sizeof(EdgeNode));
e->adjvex = j;
e->next = G->adjList[i].firstEdge;
G->adjList[i].firstEdge = e;
e = (EdgeLink) malloc(sizeof(EdgeNode));
e->adjvex = i;
e->next = G->adjList[j].firstEdge;
G->adjList[j].firstEdge = e;
}
return OK;

第1页

TOP相关主题

  • 二叉树的创建和遍历
  • 二叉树的创建与遍历
  • 图的邻接表
  • 有向图的邻接表
  • 无向图的邻接表
  • 图的邻接表存储
  • 图的邻接表表示
  • 图的遍历

我要评论

相关文档

  • 图的邻接表创建法及深度遍历

    图的邻接表创建法及深度遍历 隐藏>> //*** //程序:树的创建及深度遍历 //Scharf //*** #include<stdio.h> #include<malloc.h> #define MaxVerNum 100 ...

  • 基于邻接表的图的遍历

    第二章 需求分析 2.1 课程设计内容该课题要求以邻接表的方式存储图,输出邻接表,并要求实现图的深度、广 度两种遍历。 2.1.1 图的邻接表的建立与输出对任意...

  • 无向图的邻接表构建和两种遍历

    无向图的邻接表构建和两种遍历_工学_高等教育_教育专区。用邻接表存储方式构建无...图,所以有两次建立表的过程 } } //===无向图的邻接表输出===// void...

  • 邻接表的建立和遍历

    邻接表的建立和遍历_IT/计算机_专业资料。邻接表的建立和遍历详细代码和讲解从一个初学者的角度编写和讲解(我就是初学者,我自己写的。。)自学...

  • 《数据结构》上机实验报告—有向图的邻接表的建立及遍历

    信息计算科学与应用数学 6 班 学号 姓名 成绩 实验名称 图的有关操作 实验内容 有向图的邻接表的建立及遍历 实 【实验目的】 验1.掌握图的存储思想及其存储...

  • 图的邻接表的实现及遍历

    目的 理解邻接表类中的生成与遍历算法 二、实验内容 A 95 63 49 84 44 35 C B 37 D E 编写代码,创建图的邻接表,并进行遍历,输出该图的邻接表与遍历序列...

  • 图建立邻接表,深度与广度遍历

    为一个图建立一个邻接表、编...为一个图建立一个邻接表、编写深度遍历和广度遍历算法 #include <stdio.h> #...

  • 图的邻接表和遍历

    算法描述先定义图的邻接表数据类型,建立图的邻接表,然后再用子函数写出深度优先搜索遍 历和广度优先搜索遍历的遍历算法,最后用主函数调用它们。 实现深度优先搜索...

  • C++图的创建与遍历实验报告

    C++图的创建与遍历实验报告_理学_高等教育_教育专区。实验 五一、实验目的 图的遍历及其应用实现 1.熟悉图常用的存储结构。 2.掌握在图的邻接矩阵和邻接表两种结构...

  • 图的创建和遍历

    图-创建-遍历-出入度 暂无评价 3页 7下载券 实验五 图的创建与遍... 4页...} ? } 7.2.2 邻接表 ? ? ? ? ? 将每个结点的边用一个单链表链接起来...

站点地图 | 文档上传 | 侵权投诉 | 手机版
新浪认证  诚信网站  绿色网站  可信网站   非经营性网站备案
本站所有资源均来自互联网,本站只负责收集和整理,均不承担任何法律责任,如有侵权等其它行为请联系我们.
文档下载 Copyright 2013 doc.xuehai.net All Rights Reserved.  email
返回顶部