图的邻接表储存及其遍历[数据结构学习]
来源:互联网 发布:mysql从入门到精通 编辑:程序博客网 时间:2024/05/16 13:54
好长时间没有写代码(感觉自己更弱了),今天晚上就把数据结构的链表和邻接表部分实现了(手都生了),第一次写邻接表,觉得还是邻接矩阵好很多,毕竟建表还是挺麻烦的.....顺便把bfs和dfs加了进去,刚学数据结构或者算法入门的可以看看,我是小菜,大神 求别喷......
过两天再把几种排序和查找的时空分析和代码实现总结一下,顺便自己也能学到很多,快要考试了,ACM的步伐就放缓一下下......
//图的邻接表储存及搜索 ,第一次写邻接表,还是比较麻烦的 ,下面的代码以有向图为例进行分析 //邻接矩阵就比较简单了,直接把p=p->next改为循环查找,然后操作都是一样的 //其实我觉得邻接表比邻接矩阵没有好到哪去,建表多出一步啊 ,做题还是矩阵来的方便 #include<iostream>#include<queue>#include<stack>#include<cstring> #define N 10000 //顶点个数using namespace std;int vist[N];struct ArcNode //顶点的一个边节点{ int value ; //该邻接点 的值 ArcNode *nextver; //下一个 邻接点的指针 };struct K_Node{ //int value; // 可有可无,如果顶点是从0开始计数value=数组下标,否则等于数组下标加一 ArcNode *nextver; // 顶点的出边表表头指针 //ArcNode *head2; // 如果有向图需要记录每个顶点的入边表的节点,可加上此指针 };struct Grf{ //邻接表的建造 K_Node node[N]; //定点 int arcnum; //邻接表边数 int vexnum; //邻接表点数 };Grf CreatGf(){ Grf GT; cout<< "请输入邻接表的边数和点数:"<<endl; cin>>GT.arcnum>>GT.vexnum; for(int i=0;i<GT.vexnum;i++) GT.node[i].nextver=NULL; //GT.node[i].head2=NULL 需建立入边表时可用到 ArcNode *pi; cout<<"请输入每条边的两个顶点"<<endl; int v1,v2; for(int i=0;i<GT.arcnum;i++) { cin>>v1>>v2; pi=new ArcNode; pi->value=v2; pi->nextver=GT.node[v1].nextver; GT.node[v1].nextver=pi; /* 如果需要建立入边表 或者是无向图则需要下列代码 pi=new ArcNode; pi->value=v1; pi->next=GT.node[v2].head2; GT.node[v2].head1=p1; */ } return GT;}void DFS( int vertex,Grf GT) //深度优先搜索{ vist[vertex]=1; //搜索到后做标记 cout<<vertex<<" "; ArcNode *p=GT.node[vertex].nextver; while(p!=NULL) { if(vist[p->value]==0) DFS(p->value,GT); p=p->nextver; } }void BFS(int vertex ,Grf GT) //广度优先搜索{ vist[vertex]=1; queue<int> q; q.push(vertex); while(!q.empty()) { int k=q.front(); cout<<k<<" "; q.pop(); ArcNode *p=GT.node[k].nextver; while(p!=NULL) { if(vist[p->value]==0) { vist[p->value]=1; q.push(p->value); } p=p->nextver; } }} int main() { Grf GT=CreatGf(); //建表 memset(vist,0,sizeof(vist)); cout<<"DFS测试结果为:"<<endl; DFS(1,GT); //深搜 cout<<endl<<"BFS测试结果为:" <<endl ; memset(vist,0,sizeof(vist)); BFS(1,GT); //广搜 system("pause"); return 0;}/*测试数据如下8 81 2 2 32 55 11 44 66 77 8*/
- 图的邻接表储存及其遍历[数据结构学习]
- 邻接表实现图的储存,遍历
- 图的邻接表储存。
- 图的邻接表存储结构的定义及其遍历
- 基于邻接表储存的图的深度优先和广度优先遍历
- 无向图的邻接表储存
- 图的储存之邻接表
- 图的储存结构之邻接表
- 有向图的邻接表储存
- 图的邻接表存储及其遍历(使用模板)
- 建立图的邻接表储存并实现深度优先和广度优先遍历
- 数据结构:不带权有向图的邻接矩阵和邻接表储存及求出入度实现
- 数据结构--图之邻接矩阵&邻接表&图的遍历
- [C++]图的邻接矩阵、邻接表及其相互转化和邻接表的广度遍历、深度遍历
- 邻接表的图遍历
- 图的邻接表遍历
- 数据结构 学习笔记(七):图(上):图的表示方法(邻接表,邻接矩阵),遍历(DFS,BFS)
- c语言实现无向图的邻接表储存
- 通过分析 JDK 源代码研究 Hash 存储机制
- 30个有趣的人生定律
- 短信ui-会话编辑界面(一) 初识
- 24
- 从他进入联盟第一天开始,只要需要帮助,我都愿意伸出双手
- 图的邻接表储存及其遍历[数据结构学习]
- 在排序数组中查找和为给定值的两个数字
- 动态链接库和静态链接库的区别
- linux C语言网络学习总结1
- 在字符串中删除特定的字符
- PHP【curl】专题
- Qt下保存无符号单字节数据并将之转化为int型
- 常用类总结
- 关于set_new_handler(转载)