数据结构-邻接链表的建立和使用
来源:互联网 发布:四旋翼飞控编程 编辑:程序博客网 时间:2024/05/26 02:53
邻接链表其实和前向星基本一致。
邻接表的目的:通过一个点u,进而找出由他出发通向的其他的点v1,v2,v3......
邻接表的建立方法:对于一个点u,将他指向的所有点{Vi},按照插入的先后顺序,建立单链表,当有新的点进入是,采用头插法增加链表,不采用尾插法的原因是,每一次的插入都要遍历一遍{Vi}非常浪费时间,然后为了满足建立,{Vi}的顺序是不被要求的,故,在建成的图中会发现u点指向的点的遍历顺序是最后加入的最先遍历出来。
以上方法实现了对一个点的操作,那么对于一个图来说是有很多的点和边构成的,那么就可以通过一系列的{Ui}来完成对图的表示。
U1:v11->v12->v13->...(一条单链表)
U2:v21->v22->v23->...
......
Ui:vi1->vi2->vi3->...
邻接表的遍历,对一个点遍历时,通过Ui就一直next,直到结束为NULL。
至于双边,正向反向都建一此边就好了。
#include<iostream>#include<stdlib.h>using namespace std;typedef struct EdgeNode{int adjvex;//u为起点的边指向的点v(一条边的端点)int weight;//边权(此代码没有用到)struct EdgeNode *next;//指向下一个u到达的点}EdgeNode;typedef struct VexteNode{EdgeNode *firstedge;//每一个单链表的起始点}VexteNode,AdjList[100];//AdjList[i]:点i出发指向的单链表的表头储存在VexteNode结构体中AdjList adjlist;void Init(int n)//初始化{for(int i=1;i<=n;i++){adjlist[i].firstedge=NULL;}}void add(int u,int v)//插入边U->V{EdgeNode *pe;pe=(EdgeNode*)malloc(sizeof(EdgeNode));pe->adjvex=v;pe->next=adjlist[u].firstedge;//头插adjlist[u].firstedge=pe;}int main(){int T;cin>>T;while(T--){int n,m;//点数,边数cin>>n>>m;Init(n);for(int i=0;i<m;i++){int u,v;cin>>u>>v;add(u,v);}for(int i=1;i<=n;i++)//遍历所有U->V{EdgeNode *p;p=adjlist[i].firstedge;while(p){cout<<p->adjvex<<" ";p=p->next;}cout<<endl;}}return 0;} /*565 51 23 43 21 31 5*/
阅读全文
0 0
- 数据结构-邻接链表的建立和使用
- 邻接链表的建立
- 数据结构邻接表的建立以及两种遍历
- 数据结构实验7 建立邻接表
- vector 邻接表的建立
- 静态邻接表的建立
- 建立图的存储结构 :邻接表 和 邻接矩阵
- 邻接表的建立和广度优先遍历
- 图的邻接表建立以及DFS和BFS
- 数据结构图的建立和遍历(邻接表、邻接矩阵)
- 邻接链表的使用
- 数据结构---图的邻接表
- 数据结构上机实验--有向图邻接表的建立,深度广度搜索及拓扑排序
- 数据结构—图的存储—邻接表和邻接矩阵
- 数据结构 邻接链表 DFS
- 图的邻接表的建立 c++
- ACM:最短路,dijkstra,邻接表的建立,使用邻接表跟优先队列的dijkstra,Bellman-Ford,Floyd。。
- 邻接表存储图的建立
- 学习httpbin源代码记录(二)
- Windows下用Git/Github托管代码
- Python 3爬虫小实战(一)—— 豆瓣电影Top250
- 三、JS【JavaScript弱类型的脚本语言】02
- Ubuntu通过命令行设置无线网络连接
- 数据结构-邻接链表的建立和使用
- 数组初识
- 深入学习JavaScript: apply 方法 详解(转)——非常好
- Codeforces GYM 100753J: Souvenirs 题解
- 可靠性特征的数学表达式及其关系
- Matlab和C/C++混编调试
- 简单指南针icon(不像icon的icon..)
- Qt与MSVC中文乱码问题的解决方案
- 三、JS【JavaScript弱类型的脚本语言】03