【数据结构】邻接矩阵及其实现

一个图的邻接矩阵的表示是唯一的,但其邻接表表示不唯一,这是因为在邻接表结构中,各便表结点的链接次序取决于建立邻接表时的算法以及输入的次序。

一般而言邻接矩阵适合存储稠密图,邻接表适合存储稀疏图。

直接输入:

#include <stdio.h>
#include <stdlib.h>
#define M 20/*邻接表的储存结构*/
typedef struct node /*表结点 或者 边表结点*/
{int adjvex;struct node *next;
}edgenode;typedef struct vnode /*头结点*/
{char vertex;edgenode *firsteage;
}vertexnode;typedef struct  /*邻接表类型*/
{vertexnode adjlist[M];int n,e;
}linkedgraph;//建立图的邻接表(文件  或者  直接输入)
void creat(linkedgraph *g,int c)
{int i,j,k;edgenode *s;printf("请输入顶点数和边数:\n");scanf("%d%d",&g->n,&g->e);getchar();printf("请依次输入各个顶点的值:\n");for(i=0;i<g->n;i++){scanf("%c",&g->adjlist[i].vertex);g->adjlist[i].firsteage=NULL;}printf("请输入有关系的边:\n");for(k=0;k<g->e;k++){scanf("%d%d",&i,&j);s=(edgenode*)malloc(sizeof(edgenode));s->adjvex=j;s->next=g->adjlist[i].firsteage;g->adjlist[i].firsteage=s;if(c==0)//无向图{s=(edgenode*)malloc(sizeof(edgenode));s->adjvex=i;s->next=g->adjlist[j].firsteage;g->adjlist[j].firsteage=s;}}
}void print(linkedgraph *g)
{printf("\n\n输出:\n");edgenode *p;int i;printf("一共有%d个结点,%d条边\n",g->n,g->e);for(i=0;i<g->n;i++){p=g->adjlist[i].firsteage;printf("V%d -> ",i);while(p){printf("%d",p->adjvex);if(p->next)printf(" -> ");p=p->next;}printf("\n");}
}int main ()
{linkedgraph g;creat(&g,1);print(&g);return 0;
}

      

使用文件操作:

void creat (linkedgraph *g,int c)
{int i,j,k;edgenode *s;FILE *f;f=fopen("test.txt","r");if(f){fscanf(f,"%d%d",&g->n,&g->e);for(i=0;i<g->n;i++){fscanf(f,"%1s",&g->adjlist[i].vertex);g->adjlist[i].firsteage=NULL;}for(k=0;k<g->e;k++){fscanf(f,"%d%d",&i,&j);s=(edgenode*)malloc(sizeof(edgenode));s->adjvex=j;s->next=g->adjlist[i].firsteage;g->adjlist[i].firsteage=s;if(c==0){s=(edgenode*)malloc(sizeof(edgenode));s->adjvex=i;s->next=g->adjlist[j].firsteage;g->adjlist[j].firsteage=s;}}fclose(f);}else{g->n=0;}
}

        

【数据结构】邻接表的储存结构 建立图的邻接表算法相关推荐

  1. C++实现由二元组建立图的邻接表

    有向图的二元组表示:<first,second>表示从first顶点指向seoncd顶点 有向图可以用二元组<1,2>,<2,3>,<3,1>表示 所以 ...

  2. 【数据结构与算法】广义表的储存结构和结点定义的Java实现

    广义表的存储结构 广义表中元素类型不统一,在Java语言的环境下难以用顺序结构存储.链式结构则相对灵活,可以解决广义表的递归和共享问题,所以常用链式存储结构来对广义表进行存储. 如果广义表不空,则可以 ...

  3. 什么是线性表?什么是线性表的顺序存储结构?什么是线性表的链式存储结构?

    1.线性表是最简单也是最常用的一种数据结构.线性表的例子不胜枚举,例如,英文字母表就是一个线性表,表中的英文字母是一个数据元素. 2.线性表的定义:线性表是具有相同特性的数据元素的一个有限序列. 3. ...

  4. 【数据结构】图的存储结构(邻接矩阵、邻接表、十字链表、邻接多重表)及实现(C语言)

    目录 1. 邻接矩阵表示法 1.1 图的邻接矩阵 1.2 创建有向网的邻接矩阵 2. 邻接表表示法 2.1 图的邻接表存储结构 2.2 创建有向图的邻接表 3. 十字链表表示法 3.1 图的十字链表存 ...

  5. 图的存储结构(邻接矩阵和邻接表)

    图的存储结构(邻接矩阵和邻接表) 前言: 前面我们学习图的有些定义和术语,对图这个数据结构有了新的见解和认知,让我们理解图结构的知识,今天我们学习图的存储结构,图的存储结构比较多,我们今天主要是学习邻 ...

  6. mysql 邻接表_图的邻接表存储结构详解

    通常,图更多的是采用链表存储,具体的存储方法有 3 种,分别是邻接表.邻接多重表和十字链表. 本节先讲解图的邻接表存储法.邻接表既适用于存储无向图,也适用于存储有向图. 在具体讲解邻接表存储图的实现方 ...

  7. 图——图的存储结构(邻接矩阵和邻接表法)

    图的五种存储结构: 1.图的邻接矩阵表示法 图是由顶点和边或弧两部分组成.图的邻接矩阵(Adjacency Matrix)存储方式是用两个数组表示图,一个一维数组存储图中的顶点信息,一个二维数组(邻接 ...

  8. 数据结构开发(3):线性表的顺序存储结构

    0.目录 1.线性表的本质和操作 2.线性表的顺序存储结构 3.顺序存储结构的抽象实现和具体实现 3.1 SeqList 3.2 StaticList 和 DynamicList 4.顺序存储线性表的 ...

  9. 数据结构实验课:实验六、图的遍历操作及应用

    题目 一.实验目的 掌握有向图和无向图的概念:掌握邻接矩阵和邻接链表建立图的存储结构:掌握DFS及BFS对图的遍历操作:了解图结构在人工智能.工程等领域的广泛应用. 二. 实验要求 采用邻接矩阵和邻接 ...

最新文章

  1. winform利用CefSharp调用google浏览器内核ChromiumWebBrowser,与JS交互
  2. Association Rules 关联规则
  3. 【控制】《自动控制原理》胡寿松老师-第3章-线性系统的时域分析法
  4. 【Win32汇编】复制字符串
  5. 用java实现八皇后问题_使用java语言实现八皇后问题
  6. python替换缺失值_python 缺失值处理(Imputation)
  7. 模为2的逆元是什么_两种求模m逆元的方法
  8. html中th 与thead tbody的 使用
  9. tcpdump抓包最常用的命令
  10. WebPack配置文件抽离存放
  11. idea tomcat 发布web工程全过程
  12. JUnit 单元测试
  13. react在线编辑器
  14. linux 编辑 iso文件格式,这两款实用的光盘映像文件制作编辑软件让你处理ISO文件易如反掌...
  15. SQL注入常用WAF绕过姿势
  16. mysql字符集异常_mysql字符集设置出错问题
  17. 开源office办公套件
  18. [BUGKU] [MISC] 图穷匕见
  19. ESP32与STM32的SPI半双工通信与握手协议讲解(附代码)
  20. Docker实现SpringBoot项目的快速构建(二)

热门文章

  1. 前端中的this,指的是什么?
  2. 学好web前端开发要注意哪些问题
  3. vivo7.0系统机器(亲测有效)激活Xposed框架的教程
  4. [洛谷P1317]低洼地
  5. Lambda中的常用sql方法
  6. NAS存储对称和非对称结构之前的区别概述
  7. .net使用memcached
  8. dedecms /member/reg_new.php SQL Injection Vul
  9. php时区问题导致php页面显示不正常
  10. 从当前日期算起,获取几天前的日期和几个月前的日期