c语言邻接表的构建_c语言数据结构--图的邻接矩阵和邻接表操作的基本操作
#include
#include
#include
#define MAX 100
typedef char DataType;
typedef int VectorRelationType;
typedef char VectorType;
typedef struct arcell
{
VectorRelationType adj;
//DataType * data;
}arcell, adjmatrix[MAX][MAX];
//邻接矩阵定义
typedef struct
{
VectorType vexs[MAX];
//顶点向量
adjmatrix
arcs; //邻接矩阵
int vexnum,
arcnum; //图的当前顶点数和边数
// GraphType kind;
}MGraph;
typedef struct ArcNode
{
int
adjvex; //邻接点在头结点数组中的位置(下标)
struct ArcNode * nextarc;
//指向下一个表结点
DataType * date;
}ArcNode;
//顶点结点
typedef struct VNode
{
VectorType vexdata;
ArcNode * firstarc;
}VNode, Adjlist[MAX];
//邻接表类型定义
typedef struct
{
Adjlist vexs;
int vexnum, arcnum;
//GraphType gtype;
}ALGraph;
//打印邻接表
void TraverseG(ALGraph G)
{
ArcNode * p;
int i;
printf("图的邻接表如下:\n");
for(i = 0; i
< G.vexnum; i++)
{
printf("%c ->", G.vexs[i].vexdata);
p = G.vexs[i].firstarc;
while(p)
{
printf("%d ->", p->adjvex);
p = p->nextarc;
}
printf("NULL\n");
}
}
//确定v在邻接矩阵中位置
int Locatevex(ALGraph * G, VectorType v)
{
int i;
for(i = 0; i
< G->vexnum; i++)
if(G->vexs[i].vexdata == v)
return (i);
return -1;
}
int locatevexM(MGraph * G, VectorType v)
{
int i;
for(i = 0; i
< G->vexnum; i++)
if(G->vexs[i] == v)
return (i);
return -1;
}
//建立邻接矩阵
void CreateMGraph(MGraph * G)
{
int i, j, k, w;
VectorType u, v;
printf("创建有向图的邻接矩阵\n");
printf("请输入当前的顶点数和弧数(vex
arc): \n");
fflush(stdin); //清空输入缓冲区,确保不影响后面的数据读取
scanf("%d %d",
&G->vexnum,
&G->arcnum);
for(i = 0; i
< G->vexnum; i++)
{
printf("请输入第%d个顶点(vertex): \n", i+1);
fflush(stdin);
scanf("%c", &G->vexs[i]);
}
for(i = 0; i
< G->vexnum; i++)
{
for(j = 0; j < G->vexnum; j++)
{
G->arcs[i][j].adj = 0;
}
}
for(k = 0; k
< G->arcnum; k++)
{
printf("请输入顶点和权值
fflush(stdin);
scanf("%c %c %d", &u, &v,
&w);
i = locatevexM(G, u);
j = locatevexM(G, v);
G->arcs[i][j].adj = w;
}
}
void CreateALGraph(ALGraph * G)
{
int i, j, k;
ArcNode * s;
char u, v;
printf("请输入当前顶点数和弧数(vex
arc):\n");
fflush(stdin);
scanf("%d %d",
&G->vexnum,
&G->arcnum);
printf("首先输入顶点:\n");
for(i = 0; i
< G->vexnum; i++)
{
printf("请输入顶点%d,回车输入下一个顶点\n", i);
fflush(stdin);
scanf("%c",
&(G->vexs[i].vexdata));
G->vexs[i].firstarc = NULL;
}
printf("接下来输入弧:\n");
for(k = 0; k
< G->arcnum; k++)
{
printf("请输入弧%d, 回车输入下一条弧\n", k);
fflush(stdin);
scanf("%c %c", &u, &v);
i = Locatevex(G, u);
j = Locatevex(G, v);
s = (ArcNode *)malloc(sizeof(ArcNode));
s->adjvex = j;
s->nextarc = G->vexs[i].firstarc;
G->vexs[i].firstarc = s;
}
}
void Print_MGraph(MGraph * G)
{
int i, j;
printf("\n");
printf("邻接矩阵输入如下: \n");
printf("[]");
for(i = 0; i
< G->vexnum; i++)
printf("%c ", G->vexs[i]);
printf("\n");
for(i = 0; i
< G->vexnum; i++)
{
printf("%c ", G->vexs[i]);
for(j = 0; j < G->vexnum; j++)
printf("%d ", G->arcs[i][j].adj);
printf("\n");
}
}
//邻接表转换为邻接矩阵
void list_to_mat(ALGraph * AG, MGraph * MG)
{
int i, j;
ArcNode * p;
MG->vexnum =
AG->vexnum;
for(i = 0; i
< AG->vexnum; i++)
{
for(j = 0; j < AG->vexnum; j++)
{
MG->arcs[i][j].adj = 0;
}
}
for(i = 0; i
< AG->vexnum; i++)
{
MG->vexs[i] =
AG->vexs[i].vexdata;
}
printf("图的顶点向量如下:\n");
for(i = 0; i
< AG->vexnum; i++)
{
printf("%d %c\n", i, MG->vexs[i]);
}
for(i = 0; i
< AG->vexnum; i++)
{
p = AG->vexs[i].firstarc;
while(p != NULL)
{
MG->arcs[i][p->adjvex].adj = 1;
p = p->nextarc;
}
}
}
void main()
{
MGraph MG;
ALGraph AG;
CreateALGraph(&AG);
TraverseG(AG);
list_to_mat(&AG, &MG);
Print_MGraph(&MG);
CreateMGraph(&MG);
Print_MGraph(&MG);
}
c语言邻接表的构建_c语言数据结构--图的邻接矩阵和邻接表操作的基本操作相关推荐
- 实现图的邻接矩阵和邻接表存储
/** * 实验题目: * 实现图的邻接矩阵和邻接表存储 * 实验目的: * 领会图的两种主要存储结构和图基本运算算法设计 * 实验内容: * ...
- 实现图的邻接矩阵和邻接表的存储
十五,实现图的邻接矩阵和邻接表的存储 #include<stdio.h> #include<stdlib.h> #define max 100 #define INF 3276 ...
- c语言邻接表的构建_C++实现有向图邻接表的构建
本文实例为大家分享了C++实现有向图邻接表的构建代码,供大家参考,具体内容如下 数据结构里面的一道基础题,分享下自己的写法,验证可跑. #include #include const int MAX ...
- 不同表结构数据迁移_C语言:数据结构-广义表的存储结构
广义表相对于线性表﹑数组﹑串等线性结构是较为复杂的结构,其元素可以具有不同的结构(可以是原子,也可以是列表),通常采用链式结构存储广义表. (1)表头.表尾链式存储 链式结构中用结点储存列表中的数据元 ...
- c语言机票座位预定系统_C语言实现飞机订票系统
问题描述与题目要求 问题描述: 假定某民航有M个航次的班机,每个航次都只到达一个地方.试为该机场售票处设计一个自动订票和退票系统,要求系统具有以下功能: (1) 订票:若该航次余票大于等于乘客订票数, ...
- vc 运行c语言步骤,第1章_C语言概述(vc++环境如何运行c语言程序)[精选].ppt
第1章_C语言概述(vc环境如何运行c语言程序)[精选] C语言程序设计 授课对象:电子商务06 时间安排: 理论课(1-9周): 星期一 5-6节 9407D 星期三 5-6节 9410D 实验课( ...
- c语言string函数的用法_C语言基础| 指针和函数
点击蓝字关注我们 指针和函数 栈帧:当函数被调用时,系统会在stack空间上申请一块内存,用来给函数提供空间,存储形参和局部变量(定义在函数内部的变量). 当函数调用结束时,这块内存空间会被自动释放( ...
- c程序设计语言 qsort,【程序设计基础_C语言】北理工的恶龙(附qsort范例)
[程序设计基础_C语言]北理工的恶龙(附qsort实例) 北理工的恶龙(附qsort实例) 背景:最近,北理工出现了一只恶龙,它长着很多 头,而且还会吐火,它将会把北理工烧成废墟, 于是,校长下令召集 ...
- c语言最小点对问题_C语言教程(一):程序开发理论基础!
前言: 1.本系列教程适用于刚开始学习 C 语言的同学,或者初级开发者,或者想系统详细了解 C 语言的小伙伴. 2.本系列教程会从C语言基础到 C 语言高级语法,包含 C 语言所有系列. C语言简介 ...
最新文章
- SAP WM LT15不能取消二步法确认场景中只做过第一步确认的TO单
- ASP.NET MVC中如何以ajax的方式在View和Action中传递数据
- .dat文件写入byte类型数组_文件字节流、文件字符流、缓冲字节流、缓冲字符流字节数组流、数据流、转换流、对象流...
- Python-100例(7-8) 复制列表 打印乘法口诀
- 创建用户故事地图的步骤
- [读书笔记] - 《深度探索C++对象模型》第2章 构造函数语意学
- kafka jar包_和同事交流不会kafka怎么行,API奉上,不是大神也能编
- 2015.12.21 内存管理(memory management)
- C# 正则表达式 匹配IP地址
- 201571030139/201571030134 小学生四则运算软件结对编程
- GIMP基本功能和教程!
- 设置导航标题颜色以及导航条背景色
- 一个Android开发6年程序员的年终面试总结,2021无畏艰难险阻,迎风潇洒前行
- 一键加速GitHub、Pypi、DockerHub访问
- Redis 之 SessionCallback RedisCallback 使用
- Unity 游戏脚本
- 33-Figma-数据采集器使用方式-后裔采集器
- tkinter可视化天气查询
- 如何正确使用步道乐跑
- 【CodeForces】CF13C Sequence(配数学证明)
热门文章
- 你有遇到过MySQL因大小写敏感导致的问题吗
- tomcat的启动和窗体隐藏
- android studio 设置 ndk 路径
- implementation ‘com.zxy.android:recovery:
- nginx.pid failed (2: The system cannot find the file specified
- windows msys编译64位x264和ffmpeg
- 使用python中的socket实现服务器和客户端,并完成图片的传输
- python 安装opencv linux opencv 查看版本
- RedHat6.5网卡问题总结
- 前端到后端的整体流程介绍