图是一种重要而且相对复杂的数据结构,在实际编程中非常有用。邻接表是图的主要表示形式之一,是一种链接表表示方法。

#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平台)的更多相关文章

  1. 图的建立——邻接矩阵表示(C语言+VC6.0平台)

    图的邻接矩阵表示及其建立(无向图) #include <stdio.h> #include <stdlib.h> typedef char VertexType;        ...

  2. 常用排序算法之——快速排序(C语言+VC6.0平台)

    经典排序算法中快速排序具有较好的效率,但其实现思路相对较难理解. #include<stdio.h> int partition(int num[],int low,int high) / ...

  3. 常用排序算法之——选择排序(C语言+VC6.0平台)

    选择排序是另一种经典排序算法,核心思想是:在一趟找最小(大)数的过程中,先假设待排数据中的第一个数据即为最小(大)数据,然后循环将其他数据与该数据比较,每次比较时若小于该数据则让新数据成为最小(大)数 ...

  4. 图->存储结构->邻接表

    文字描述 邻接表是图的一种链式存储结构.在邻接表中,对图中每个顶点建立一个单链表,第i个单链表的结点表示依附顶点vi的边(对有向图是指以顶点vi为尾的弧).单链表中的每个结点由3个域组成,其中邻接点域 ...

  5. 数据结构之---C语言实现图的邻接表存储表示

    // 图的数组(邻接矩阵)存储表示 #include <stdio.h> #include <stdlib.h> #include <string.h> #defi ...

  6. 邻接表有向图(一)之 C语言详解

    本章介绍邻接表有向图.在"图的理论基础"中已经对图进行了理论介绍,这里就不再对图的概念进行重复说明了.和以往一样,本文会先给出C语言的实现:后续再分别给出C++和Java版本的实现 ...

  7. 邻接表无向图(一)之 C语言详解

    本章介绍邻接表无向图.在"图的理论基础"中已经对图进行了理论介绍,这里就不再对图的概念进行重复说明了.和以往一样,本文会先给出C语言的实现:后续再分别给出C++和Java版本的实现 ...

  8. 图->存储结构->邻接多重表

    文字描述 邻接多重表是无向图的另一种链式存储结构. 虽然邻接表是无向图的一种很有效的存储结构,在邻接表中容易求得顶点和边的各种信息. 但是,在邻接表中每一条边(vi,vj)有两个结点,分别在第i个和第 ...

  9. c_数据结构_图_邻接表

    课程设计------邻接表 图的遍历实现课程设计:https://files.cnblogs.com/files/Vera-y/图的遍历_课程设计.zip #include<stdio.h> ...

随机推荐

  1. InstallShield: cannot extract icon with index 0错误解决方案

    在VS2012打包过程中,遇到这个错误,困扰我好几天,后来通过谷歌找到解决方案,如下: Expand the deploy solution (+) on the right panel (Solut ...

  2. 辗转相除法_欧几里得算法_java的实现(求最大公约数)

    辗转相除法,又被称为欧几里德(Euclidean)算法, 是求最大公约数的算法. 当然也可以求最小公倍数. 算法描述 两个数a,b的最大公约数记为GCD(a,b).a,b的最大公约数是两个数的公共素因 ...

  3. 甲骨文公司 Oracle

    甲骨文公司 甲骨文公司,全称甲骨文股份有限公司,是全球最大的企业软件公司,总部位于美国加利福尼亚州的红木滩.甲骨文是继Microsoft之后,全球收入第二多的软件公司.甲骨文公司1989年正式进入中国 ...

  4. STL——heap的4大操作

    STL的堆操作 STL里面的堆操作一般用到的只有4个:make_heap();.pop_heap();.push_heap();.sort_heap(); 他们的头文件函数是#include < ...

  5. Hive学习笔记【转载】

    本文转载自:http://blog.csdn.net/haojun186/article/details/7977565 1.  HIVE结构 Hive 是建立在 Hadoop 上的数据仓库基础构架. ...

  6. oracle创建表空间,用户,授权等

    #oracle数据库安装完成后,有两个系统级的用户system 默认密码为 :managersys 默认密码为 :change_on_install #创建表空间tbs_xxxdba,初始大小1G,每 ...

  7. QT 仓库管理系统 开放源代码

    IT 要走多久,要怎么走. IT 要走多久,要怎么走.这些问题,在我已经快毕业了一个年头的如今,又又一次浮如今我的脑海里.一边是工作的了了模块,一边是能够自己无聊打发的时间.这不是我当初要的路,如今的 ...

  8. [置顶] 我的Android进阶之旅------>介绍一款集录制与剪辑为一体的屏幕GIF 动画制作工具 GifCam

    由于上一篇文章:我的Android进阶之旅------>Android之动画之Frame Animation实例 中展示的是Frame动画效果,但是之前我是将图片截取下来,不好说明确切的动画过程 ...

  9. android 使用String.format("%.2f",67.876)自已定义语言(俄语、西班牙语)会把小数点变为逗号

    市场人员反映公司的app使用系统设置俄语.西班牙语,double数据会把小数点变为逗号.调试一下,是自定义的语言时候(例如,俄语.西班牙语)转换String.format("%.2f&quo ...

  10. [转] 查看CPU使用率 top命令详解

    一 top是一个动态显示过程,即可以通过用户按键来不断刷新当前状态.如果在前台执行该命令,它将独占前 台,直到用户终止该程序为止. 比较准确的说,top命令提供了实时的对系统处理器的状态监视.它将显示 ...