图的邻接表存储 c实现 (转载)

用到的数据结构是

一个是顶点表,包括顶点和指向下一个邻接点的指针

一个是边表, 数据结构跟顶点不同,存储的是顶点的序号,和指向下一个的指针

刚开始的时候把顶点表初始化,指针指向null。然后边表插入进来,是插入到前一个,也就是直接插入到firstedge指向的下一个,而后面的后移

  1. #define MaxVertexNum 100
  2.  
  3. typedef char VertexType;
  4. typedef struct node //边表节点
  5. {
  6. int adjvex;
  7. node* next;
  8. }EdgeNode;
  9.  
  10. typedef struct //顶点表节点
  11. {
  12. VertexType vertex;
  13. EdgeNode* firstedge;
  14. }VertexNode;
  15.  
  16. typedef VertexNode AdjList[MaxVertexNum];
  17.  
  18. typedef struct
  19. {
  20. AdjList adjlist;
  21. int n,e;
  22.  
  23. }ALGraph;

以下建立的是无向图的邻接表,有向图的更简单了

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #define MaxVertexNum 100
  5.  
  6. typedef char VertexType;
  7. typedef struct node //边表节点
  8. {
  9. int adjvex;
  10. node* next;
  11. }EdgeNode;
  12.  
  13. typedef struct //顶点表节点
  14. {
  15. VertexType vertex;
  16. EdgeNode* firstedge;
  17. }VertexNode;
  18.  
  19. typedef VertexNode AdjList[MaxVertexNum];
  20.  
  21. typedef struct
  22. {
  23. AdjList adjlist;
  24. int n,e;
  25.  
  26. }ALGraph;
  27.  
  28. void create(ALGraph*);
  29.  
  30. void main()
  31. {
  32. ALGraph* G= (ALGraph*)malloc(sizeof(ALGraph));
  33. create(G);
  34. for (int i=0;i< G->n;i++)
  35. {
  36. printf("%d->",i);
  37. while(G->adjlist[i].firstedge!=NULL)
  38. {
  39. printf("%d->",G->adjlist[i].firstedge->adjvex);
  40. G->adjlist[i].firstedge=G->adjlist[i].firstedge->next;
  41.  
  42. }
  43. printf("\n");
  44. }
  45. }
  46. void create(ALGraph* G)
  47. {
  48. int i,j,k,w,v;
  49. EdgeNode *s;
  50. printf("读入顶点数和边数");
  51. scanf("%d,%d",&G->n,&G->e);
  52.  
  53. for (i=0;i<G->n;i++)
  54. {
  55. fflush(stdin);
  56. printf("建立顶点表");
  57. G->adjlist[i].vertex=getchar();
  58. G->adjlist[i].firstedge=NULL;
  59. }
  60. printf("建立边表\n");
  61. for (k=0;k<G->e;k++)
  62. {
  63. printf("读入(vi-vj)的顶点对序号");
  64. scanf("%d,%d",&i,&j);
  65. s=(EdgeNode*)malloc(sizeof(EdgeNode));
  66. s->adjvex=j;
  67. s->next=G->adjlist[i].firstedge; //插入表头
  68. G->adjlist[i].firstedge=s;
  69. s=(EdgeNode*)malloc(sizeof(EdgeNode));
  70. s->adjvex=i;
  71. s->next=G->adjlist[j].firstedge;
  72. G->adjlist[j].firstedge=s;
  73.  
  74. }
  75. }

图的邻接表存储 c实现的更多相关文章

  1. 图的邻接表存储表示(C)

    //---------图的邻接表存储表示------- #include<stdio.h> #include<stdlib.h> #define MAX_VERTEXT_NUM ...

  2. 数据结构之---C语言实现图的邻接表存储表示

    // 图的数组(邻接矩阵)存储表示 #include <stdio.h> #include <stdlib.h> #include <string.h> #defi ...

  3. c_数据结构_图_邻接表

    课程设计------邻接表 图的遍历实现课程设计:https://files.cnblogs.com/files/Vera-y/图的遍历_课程设计.zip #include<stdio.h> ...

  4. 数据结构(11) -- 邻接表存储图的DFS和BFS

    /////////////////////////////////////////////////////////////// //图的邻接表表示法以及DFS和BFS //////////////// ...

  5. 邻接表存储图,DFS遍历图的java代码实现

    import java.util.*; public class Main{ static int MAX_VERTEXNUM = 100; static int [] visited = new i ...

  6. c++邻接表存储图(无向),并用广度优先和深度优先遍历(实验)

    一开始我是用c写的,后面才发现广搜要用到队列,所以我就直接使用c++的STL队列来写, 因为不想再写多一个队列了.这次实验写了两个多钟,因为要边写边思考,太菜了哈哈. 主要参考<大话数据结构&g ...

  7. PTA 邻接表存储图的广度优先遍历(20 分)

    6-2 邻接表存储图的广度优先遍历(20 分) 试实现邻接表存储图的广度优先遍历. 函数接口定义: void BFS ( LGraph Graph, Vertex S, void (*Visit)(V ...

  8. PTA 邻接表存储图的广度优先遍历

    试实现邻接表存储图的广度优先遍历. 函数接口定义: void BFS ( LGraph Graph, Vertex S, void (*Visit)(Vertex) ) 其中LGraph是邻接表存储的 ...

  9. 数据结构学习笔记05图 (邻接矩阵 邻接表-->BFS DFS、最短路径)

    数据结构之图 图(Graph) 包含 一组顶点:通常用V (Vertex) 表示顶点集合 一组边:通常用E (Edge) 表示边的集合 边是顶点对:(v, w) ∈E ,其中v, w ∈ V 有向边& ...

随机推荐

  1. JavaWeb——文件上传和下载

    在Web应用系统开发中,文件上传和下载功能是非常常用的功能,今天来讲一下JavaWeb中的文件上传和下载功能的实现. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用 ...

  2. vector的内存分配与释放

    1. vector内存分配 <Effective STL>中"条款14":使用reserve来避免不必要的重新分配 关于STL容器,最神奇的事情之一是只要不超过它们的最 ...

  3. lua 类继承和实现

    http://blog.csdn.net/ssihc0/article/details/7742323 Account={balance=}; --新建了一个对像,他有一个属性balance func ...

  4. ZendStudio快捷键 注释的快捷键

    注:本文省略“通用快捷键”描述,诸如:ctrl+N=新建,ctrl+O=打开,ctrl+C=复制,ctrl+V,ctrl+X……等等几乎所有软件都通用的一组快捷键,而着重介绍zde独有的快捷键,了解并 ...

  5. 基于angularJS和requireJS的前端架构

    1.概要描述 1.1.angularJS描述:angularJS是可以用来构建WEB应用的,WEB应用中的一种端对端的完整解决方案.通过开发者呈现一个更高层次的抽象来简化应用的开发.最适合的就是用它来 ...

  6. 【并查集专题】【HDU】

    PS:做到第四题才发现 2,3题的路径压缩等于没写 How Many Tables Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65 ...

  7. ASP.NET属性之AssociatedControlID

    AssociatedControlID 是用在Asp.Net 中的 Label 控件上.给label控件关联一个ASP.NET的控件,在点击 这个 LABEL的时候,所关联的ASP.NET控件会获得焦 ...

  8. Tomcat地址栏传中文参数乱码问题处理

    javascript中有时需要向后台传递中文参数,再次展示到前台时显示为乱码,解决方案: 方案1:修改Tomcat-conf-server.xml文件 大约69-71行  修改为: <Conne ...

  9. jQuery.on() 函数详解

    on() 函数用于为指定元素的一个或多个事件绑定事件处理函数. 此外,你还可以额外传递给事件处理函数一些所需的数据. 从jQuery 1.7开始,on()函数提供了绑定事件处理程序所需的所有功能,用于 ...

  10. A - 487-3279

    Description Businesses like to have memorable telephone numbers. One way to make a telephone number ...