C数据结构学习历程(6) 图之邻接表表示法
来源:互联网 发布:强殖装甲知乎 编辑:程序博客网 时间:2024/05/02 01:34
我是参照《严蔚敏数据结构ppt》http://wenku.baidu.com/view/3ff16fc20242a8956aece41d.html以及《大话数据结构》来写的,因为ppt上有些错,而视频上的代码不全,自己另写了。ppt上错哪,我就不指出了,大家可以对照着看,就能发现不同之处。
struct 有3个,层层套用 ,学习struct的灵活运用。
#include<iostream>using namespace std;typedef char VertexType; //顶点类型typedef int EdgeType; //边上的权值类型#define MAXVEX 100typedef struct EdgeNode //边表结点{int adjvex; //邻接点域,存储该顶点的下标。怎么做到呢?是因为包含关系,被包含VertexNode里面EdgeType weight; //权值struct EdgeNode *next; //链域,指向下一个邻接点}EdgeNode;typedef struct VertexNode //顶点表结点{VertexType data; //这是顶点的名称(字母表示),这个和AdjList[MAXVEX] 中下标相对应EdgeNode *firstedge; }VertexNode,AdjList[MAXVEX];typedef struct{AdjList adjList;int numVertexes,numEdges; }GraphAdjList;//建立图的邻接表结构void CreateALGraph(GraphAdjList *G){int i,j,k;EdgeNode *e;cout<<"输入顶点数和边数"<<endl;cin>>G->numVertexes >>G->numEdges ;for(i=0;i<G->numVertexes ;i++){cout<<"输入顶点变量:"<<endl;cin>>G->adjList[i].data ; //建立顶点表G->adjList [i].firstedge =NULL; //初始化,还没有内存,在下面出现}for(k=0;k<G->numEdges ;k++) //建立边表{cout<<"输入边(vi,vj)上的顶点序号:"<<endl;//对于这里的编号应该与上面的一致,不然的话就用一个函数去求Location()cin>>i>>j;//向内存申请空间,指针初始化e=(EdgeNode *)malloc(sizeof(EdgeNode));e->adjvex =j; //邻接序号为j;e->next =G->adjList [i].firstedge ;G->adjList [i].firstedge=e; //相当于头结点一直在动,链表里的头插法//因为是无向图,所以需要下面的e=(EdgeNode *)malloc(sizeof(EdgeNode));e->adjvex =i; //邻接序号为j;e->next =G->adjList [j].firstedge ;G->adjList [j].firstedge=e; }}//邻接表深度优先typedef int Boolean;Boolean visited[MAXVEX];void DFS(GraphAdjList GL,int i){EdgeNode *p;visited[i]=true;cout<<GL.adjList [i].data <<endl;p=GL.adjList [i].firstedge ;while(p) //为空就结束了{if(!visited[p->adjvex ]){DFS(GL,p->adjvex);}p=p->next;}}void DFSTraverse(GraphAdjList GL){for(int i=0;i<MAXVEX;i++){visited[i]=false;}for(int i=0;i<GL.numVertexes ;i++){if(!visited[i]){DFS(GL,i);}}}int main(){ GraphAdjList p; CreateALGraph(&p); DFSTraverse(p);return 0;}
随便画的一个图,遍历如下 无向图
遍历结果:
0 0
- C数据结构学习历程(6) 图之邻接表表示法
- 数据结构之图的邻接表表示法
- 数据结构之图的邻接表表示法
- 数据结构的C实现_图_邻接表表示
- 数据结构(C实现)------- 图的邻接表表示
- 数据结构(C++)<图的邻接表表示>
- 数据结构——图的邻接表表示法
- 图的邻接表表示法(C语言)
- 邻接表表示图
- 39.数据结构笔记之三十九图的邻接表表示实现
- 40. 数据结构笔记之四十图的邻接多重链表表示实现
- 图的邻接表表示法
- 图的邻接表表示法
- 【数据结构】图的邻接表表示(GNU C++实现)
- C数据结构学习历程(5) 图之数组表示法
- 数据结构——图的链表实现(邻接表表示法)
- 看数据结构写代码(38) 图的邻接多重表表示法与实现
- 图的邻接表表示
- 51nod 1418 放球游戏
- POJ-2531 Network Saboteur (DFS)
- jmeter beanshell使用说明
- Java异常以及处理原则
- 《Android5.1源码探究 —— ActivityManager(3):clearApplicationUserData()》
- C数据结构学习历程(6) 图之邻接表表示法
- 详解第一组UI组件:布局管理器
- JMeter BeanShell Pre-Processor 设置变量
- codechef ANKGAME
- 对 React Native 调整目录结构(针对安卓)
- UVA 10375 Choose and divide(唯一分解定理)
- jmeter模拟不同ip并发请求
- mysql性能优化验分享
- React-组件渲染和更新的实现