算法步骤:
1.输入总顶点数和总边数
2.依次输入点的信息存入顶点表中,是每个表头结点的指针域初始化为NULL
3.创建邻接表。依次输入每条边依附的两个顶点,确定这两个顶点的序号i和j之后,将此边结点分别插入Vi和Vj对应的两个边链`表头部。

//采用邻接表表示法创建无向图#include <iostream>
using namespace std;#define MVNum 100                           //最大顶点数
#define OK 1typedef char VerTexType;                    //-==顶点信息
typedef int OtherInfo;                      //和边相关的信息 //- - - - -图的邻接表存储表示- - - - -
typedef struct ArcNode{                     //边结点 int adjvex;                           //该边所指向的顶点的位置 struct ArcNode *nextarc;                  //指向下一条边的指针 OtherInfo info;                         //和边相关的信息
}ArcNode; typedef struct VNode{ VerTexType data;                        //顶点信息 ArcNode *firstarc;                       //指向第一条依附该顶点的边的指针
}VNode, AdjList[MVNum];                     //AdjList表示邻接表类型 typedef struct{ AdjList vertices;                      //邻接表 int vexnum, arcnum;                   //图的当前顶点数和边数
}ALGraph;int LocateVex(ALGraph G , VerTexType v){//确定点v在G中的位置for(int i = 0; i < G.vexnum; ++i)if(G.vertices[i].data == v)return i;return -1;
}//LocateVexint CreateUDG(ALGraph &G){ //采用邻接表表示法,创建无向图Gint i , k;cout <<"请输入总顶点数,总边数中间以空格隔开:";cin >> G.vexnum >> G.arcnum;               //输入总顶点数,总边数 cout << endl;cout << "输入点的名称,如 a " <<endl;for(i = 0; i < G.vexnum; ++i){           //输入各点,构造表头结点表cout << "请输入第" << (i+1) << "个点的名称:";cin >> G.vertices[i].data;            //输入顶点值 G.vertices[i].firstarc=NULL;           //初始化表头结点的指针域为NULL }//forcout << endl;cout << "请输入一条边依附的顶点,如 a b" << endl;for(k = 0; k < G.arcnum;++k){               //输入各边,构造邻接表VerTexType v1 , v2;int i , j;cout << "请输入第" << (k + 1) << "条边依附的顶点:";cin >> v1 >> v2;                         //输入一条边依附的两个顶点i = LocateVex(G, v1);  j = LocateVex(G, v2);//确定v1和v2在G中位置,即顶点在G.vertices中的序号 ArcNode *p1=new ArcNode;                  //生成一个新的边结点*p1 p1->adjvex=j;                        //邻接点序号为j p1->nextarc= G.vertices[i].firstarc;  G.vertices[i].firstarc=p1;  //将新结点*p1插入顶点vi的边表头部ArcNode *p2=new ArcNode;                //生成另一个对称的新的边结点*p2 p2->adjvex=i;                          //邻接点序号为i p2->nextarc= G.vertices[j].firstarc;  G.vertices[j].firstarc=p2;  //将新结点*p2插入顶点vj的边表头部 }//for return OK;
}//CreateUDGint main(){cout << "***************采用邻接表表示法创建无向图**************" << endl << endl;ALGraph G;CreateUDG(G);int i;cout << endl;cout << "*****邻接表表示法创建的无向图*****" << endl;for(i = 0 ; i < G.vexnum ; ++i){VNode temp = G.vertices[i];ArcNode *p = temp.firstarc;if(p == NULL){cout << G.vertices[i].data;cout << endl;}else{cout << temp.data;while(p){cout << "->";cout << p->adjvex;p = p->nextarc;}}cout << endl;}return 0;
}//main

运行结果:

采用邻接表表示法创建无向图相关推荐

  1. C语言邻接表表示法创建无向图并输出

    C语言邻接表表示法创建无向图并输出 邻接表是图的一种链式存储结构,对图的每个顶点建立一个单链表,单链表第一个结点存放顶点信息,其余存放有关边信息. 邻接表由表头结点表和边表组成. 邻接表存储结构 #i ...

  2. 算法6.6 采用邻接表表示图的深度优先搜索遍历

    算法6.6 采用邻接表表示图的深度优先搜索遍历 代码实现 #pragma once #include <iostream>using namespace std;//图的邻接表存储表示 # ...

  3. 邻接表法创建无向图(C语言)

    题目 本题要求建立一个无向图,采用邻接表做为存储结构. 例如: 输入信息为:第一行给出图的顶点数n和边数e.第二行给出n个字符,表示n个顶点的数据元素的值.后面是e行,给出每一条边的两个顶点编号. 输 ...

  4. 6-6 采用邻接表创建无向图

    采用邻接表创建无向图G ,依次输出各顶点的度. 函数接口定义: void CreateUDG(ALGraph &G); 其中 G 是采用邻接表表示的无向图. 裁判测试程序样例: #includ ...

  5. 数据结构与算法A实验六图论---7-10 邻接矩阵表示法创建无向图

    采用邻接矩阵表示法创建无向图G ,依次输出各顶点的度. 输入格式: 输入第一行中给出2个整数i(0<i≤10),j(j≥0),分别为图G的顶点数和边数. 输入第二行为顶点的信息,每个顶点只能用一 ...

  6. 采用邻接表存储有向图,设计算法判断任意两个顶点间是否存在路径。设计算法,将一个无向图的邻接矩阵转换为邻接表。

    采用邻接表存储有向图,设计算法判断任意两个顶点间是否存在路径.设计算法,将一个无向图的邻接矩阵转换为邻接表. 采用邻接表存储有向图,设计算法判断任意两个顶点间是否存在路径. 设计算法,将一个无向图的邻 ...

  7. 有向图的邻接表表示法

    图的邻接表表示法类似于树的孩子链表表示法.对于图G中的每个顶点vi,该方法把所有邻接于vi的顶点vj链成一个带头结点的单链表,这个单链表就称为顶点vi的邻接表(Adjacency List). 1. ...

  8. 《数据结构》-图的邻接表表示法(四)

    邻接表表示法(链式) 存储定义: 顶点:按编号顺序将顶点数据存储在一维数组中 关联同一顶点的边(以顶点为尾的弧):用线性链表存储 无向图的邻接表 例如,如下无向图 则它的邻接表为 无向图邻接表的特点: ...

  9. 【转载】邻接表表示法

    图的邻接表表示法 图的邻接表表示法类似于树的孩子链表表示法.对于图G中的每个顶点v i ,该方法把所有邻接于v i 的顶点v j 链成一个带头 结点的单链表,这个单链表就称为顶点v i 的邻接表(Ad ...

  10. 5-3 本题要求实现对图的深度优先遍历。 本题中图的表示采用邻接表表示

    程序填空题 5-3 本题要求实现对图的深度优先遍历. 本题中图的表示采用邻接表表示 #include <stdlib.h> #include <stdio.h>typedef ...

最新文章

  1. Pure-FTPd服务器
  2. redis mysql 案例_linux安装redis和mysql的实例讲解
  3. 探索ASP.NET Core中的IStartupFilter
  4. linux多少个端口,Linux允许python使用多少个网络端口?
  5. 数字电路技术可能出现的简答题_数字电子技术复习题(本科)
  6. 安全狗服云PC端V2.5.1发布 助力服务器安全运维
  7. Maven Ant 中截取字符串
  8. Java中Character类的概述及其详解
  9. YOLO v5训练时报fitness错误,求解
  10. chromebook刷机_如何以访客身份在Chrome和Chromebook上浏览
  11. java书写开头,JAVA代码书写规范汇总详解
  12. 机器人编程要学哪些知识
  13. 少儿编程会培养什么能力
  14. html网页北京大学,北京大学1.html
  15. 让AI自己调整超参数,谷歌大脑新优化器火了,自适应不同任务,83个任务训练加速比经典Adam更快...
  16. C++设计模式 | Factory工厂模式(简单工厂、工厂方法、抽象工厂)
  17. Androidnbsp;LinearLayout与Relat…
  18. Android 攻城狮的进击 1 开发环境搭建HelloWorld.apk
  19. RSD 99脚本语言拼接屏幕墙实像元显示程序剖析
  20. 华恩JAVA班第22天

热门文章

  1. linux人工智能识别停车牌,一种人工智能车牌识别停车场收费装置的制作方法
  2. 开启和关闭Windows远程管理(WinRM)
  3. tensorflow下手写汉字识别及其可视化
  4. *帅帅老师,编写函数,将999-9999整数放入一个数组当中
  5. 磁盘怎么删除分区,磁盘管理怎么删除分区
  6. python初学项目实战——名片管理系统(一)
  7. Android按钮样式
  8. 爬取全国12个热门城市奶茶店铺情况,看看你的城市哪个品牌最多
  9. Python3网络爬虫开发实战!付费讯代理、阿布云代理的使用!
  10. Word中插入参考文献 自动管理