图的建立——邻接表表示(C语言+VC6.0平台)
图是一种重要而且相对复杂的数据结构,在实际编程中非常有用。邻接表是图的主要表示形式之一,是一种链接表表示方法。
#include<stdio.h>
#include<stdlib.h>
#define MAX 10//令图的最大顶点个数为10
typedef struct node//边表结点(弧)
{
int adjvex;//相连顶点的编号
int weight;//边权
struct node *pnext;//指向下一个边表结点
}edgenode;
typedef struct vertexnode//顶点表结点
{
int adjvex;//顶点号
edgenode *pfirst;//边表头指针
}vertexnode;
typedef vertexnode adj_list[MAX]; //表头数组
typedef struct adjlist_graph//图的邻接表结构
{
int cnt_edges; //边数
int cnt_nodes; //顶点数
adj_list adjlist;//图的邻接表头
}adjlist_graph;
void create_graph(adjlist_graph* graph)//以邻接表方式创建图
{
edgenode* pnewnode;//新的边表结点
int i,j,k;
printf("输入图的顶点数和边数:\n");
scanf("%d%d",&graph->cnt_nodes,&graph->cnt_edges);
printf("图的顶点有%d个,边数有%d个\n",
graph->cnt_nodes,graph->cnt_edges);
for(i=0;i<graph->cnt_nodes;i++)//初始化图的邻接表顶点
{
graph->adjlist[i].adjvex=i;
graph->adjlist[i].pfirst=NULL;
}
for(k=0;k<graph->cnt_edges;k++)//循环输入图各条边
{ //无向图情形
printf("输入一条新的边:\n");
scanf("%d%d",&i,&j);
pnewnode=(edgenode*)malloc(sizeof(edgenode));
pnewnode->adjvex=j;
pnewnode->weight=0;
pnewnode->pnext=graph->adjlist[i].pfirst;
graph->adjlist[i].pfirst=pnewnode;
//无向图情形,具有对称性
pnewnode=(edgenode*)malloc(sizeof(edgenode));
pnewnode->adjvex=i;
pnewnode->weight=0;
pnewnode->pnext=graph->adjlist[j].pfirst;
graph->adjlist[j].pfirst=pnewnode;
}
}
void show_adjlist_graph(adjlist_graph* graph)//显示图中的顶点及其相关联的所有边
{
int i;
edgenode* pnode;
for(i=0;i<graph->cnt_nodes;i++)
{
pnode=graph->adjlist[i].pfirst;
printf("\n顶点编号%d:",graph->adjlist[i].adjvex);
while(pnode!=NULL)
{
printf(" 边:%d<->%d ",graph->adjlist[i].adjvex,pnode->adjvex);
pnode=pnode->pnext;
}
printf("\n");
}
}
int main(void)
{
adjlist_graph *pgraph;
pgraph=(adjlist_graph*)malloc(sizeof(adjlist_graph));
create_graph(pgraph);
show_adjlist_graph(pgraph);
}
图的建立——邻接表表示(C语言+VC6.0平台)的更多相关文章
- 图的建立——邻接矩阵表示(C语言+VC6.0平台)
图的邻接矩阵表示及其建立(无向图) #include <stdio.h> #include <stdlib.h> typedef char VertexType; ...
- 常用排序算法之——快速排序(C语言+VC6.0平台)
经典排序算法中快速排序具有较好的效率,但其实现思路相对较难理解. #include<stdio.h> int partition(int num[],int low,int high) / ...
- 常用排序算法之——选择排序(C语言+VC6.0平台)
选择排序是另一种经典排序算法,核心思想是:在一趟找最小(大)数的过程中,先假设待排数据中的第一个数据即为最小(大)数据,然后循环将其他数据与该数据比较,每次比较时若小于该数据则让新数据成为最小(大)数 ...
- 图->存储结构->邻接表
文字描述 邻接表是图的一种链式存储结构.在邻接表中,对图中每个顶点建立一个单链表,第i个单链表的结点表示依附顶点vi的边(对有向图是指以顶点vi为尾的弧).单链表中的每个结点由3个域组成,其中邻接点域 ...
- 数据结构之---C语言实现图的邻接表存储表示
// 图的数组(邻接矩阵)存储表示 #include <stdio.h> #include <stdlib.h> #include <string.h> #defi ...
- 邻接表有向图(一)之 C语言详解
本章介绍邻接表有向图.在"图的理论基础"中已经对图进行了理论介绍,这里就不再对图的概念进行重复说明了.和以往一样,本文会先给出C语言的实现:后续再分别给出C++和Java版本的实现 ...
- 邻接表无向图(一)之 C语言详解
本章介绍邻接表无向图.在"图的理论基础"中已经对图进行了理论介绍,这里就不再对图的概念进行重复说明了.和以往一样,本文会先给出C语言的实现:后续再分别给出C++和Java版本的实现 ...
- 图->存储结构->邻接多重表
文字描述 邻接多重表是无向图的另一种链式存储结构. 虽然邻接表是无向图的一种很有效的存储结构,在邻接表中容易求得顶点和边的各种信息. 但是,在邻接表中每一条边(vi,vj)有两个结点,分别在第i个和第 ...
- c_数据结构_图_邻接表
课程设计------邻接表 图的遍历实现课程设计:https://files.cnblogs.com/files/Vera-y/图的遍历_课程设计.zip #include<stdio.h> ...
随机推荐
- 【转】no resource found @integer/google_play_services_version whats this?
原文网址:http://stackoverflow.com/questions/24325333/no-resource-found-integer-google-play-services-vers ...
- delphi读写文本文件
delphi读写文本文件 在工作中遇到了这样一个问题,使用PLSQL将一个表的数据转化成一些列的insert语句存储到一个.sql文本中,我本来想使用access数据库中的查询视图一次执行这些语句 ...
- TeamViewer或者向日葵等无法成功远程登录
之前一直能正常远程的两台电脑,今天不知道什么原因,莫名其妙的就无法登录了. 更悲催的时,今天早上走的时候,忘把TeamViewer或者向日葵软件启动了. 还好,我登录向日葵官网,在管理中心设置里面开启 ...
- Android Monkey具体解释
Monkey是一个执行在Android设备或者虚拟机上的程序,它能随机模拟一系列用户的操作.点击,滑动,能够用它来做压力測试. 在Monkey执行的过程中,它会产生并发送一系列的事件给系统,而且监听系 ...
- server的散热和Linux中温度的检測
当server被放在散热条件不好的条件下,这样会导致硬盘驱动过早损坏,而且server其它的组件也会非常快出现问题. 现代的server主板检測到CPU过热的时候,一般会限制CPU的频率,所以即使se ...
- HDU 3791 二叉搜索树 题解
Problem Description 推断两序列是否为同一二叉搜索树序列 Input 開始一个数n,(1<=n<=20) 表示有n个须要推断,n= 0 的时候输入结束. 接下去一行是 ...
- php开启ssl支持
1.首先在php的安装文件下找到三个文件 并copy到系统目标下的 system32文件夹下: ssleay32.dll.libeay32.dll,php_openssl.dll. 2.打开php.i ...
- js中String对象
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/ ...
- yii 自动生成的内容,分页信息(Displaying 1-10 of 15 results.)如何修改或是yii cgridview template summary
问的白一点就是 Displaying 1-10 of 15 results 如何翻译 如果搜索的话, 搜这个会出来很多内容 yii cgridview template summary 好了,其他不说 ...
- ifconfig命令详解
linux下网上命名规律:eth0,eth1.第一块以太网卡,第二块.lo为环回接口,它的IP地址固定为127.0.0.1,掩码8位.它代表你的机器本身. 1.ifconfig是查看网卡的信息 eth ...