ToB企服应用市场:ToB评测及商务社交产业平台

标题: 图的邻接表实现代解析【数据结构】 [打印本页]

作者: 饭宝    时间: 2025-2-17 09:07
标题: 图的邻接表实现代解析【数据结构】
引言

在图论中,图是一种重要的数据结构,用于表示对象之间的关系。邻接表是一种常用的图的存储方式,它通过链表来表示图中顶点之间的连接关系。本文将详细解析一段使用 C++ 实现的图的邻接表代码,资助读者明白实在现原理和使用方法。
代码实现

1. 头文件和宏界说

  1. #include<iostream>
  2. #define N 105
  3. using namespace std;
复制代码

2. 结构体界说

  1. typedef struct node {
  2.     int date;
  3.     struct node* next;
  4. }edg;
  5. typedef struct nodea {
  6.     char date;
  7.     edg* firstedg;
  8. }vhead;
  9. typedef struct {
  10.     vhead adj[N];//存点
  11.     int n, m;//点数,边数
  12. }Adj;
复制代码

3. 图的创建函数 creatTu

  1. void creatTu(Adj* g, int st)//图,是否为双向图
  2. {
  3.     edg* p;
  4.     if (!st) cout << "无向图\n";
  5.     else cout << "有向图\n";
  6.     cin >> g->n;
  7.     for (int i = 1; i <= g->n; i++){
  8.         cin >> g->adj[i].date;//点
  9.         g->adj[i].firstedg = NULL;
  10.     }
  11.     cin >>g-> m;
  12.     for(int k=0;k<g->m;k++)
  13.     {
  14.         int i, j;
  15.         cin >> i >> j;//建立i->j;
  16.         p = (edg*)malloc(sizeof(edg));
  17.         p->date = j;
  18.         p->next=g->adj[i].firstedg;
  19.         g->adj[i].firstedg = p;
  20.         if (st)
  21.         {
  22.             p = (edg*)malloc(sizeof(edg));
  23.             swap(i, j);
  24.             p->date = j;
  25.             p->next = g->adj[i].firstedg;
  26.             g->adj[i].firstedg = p;
  27.         }
  28.     }
  29. }
复制代码

4. 图的打印函数 print

  1. void print(Adj* g)
  2. {
  3.     edg* p;
  4.     for (int i = 1; i <= g->n; i++){
  5.         cout << g->adj[i].date<<" ";
  6.         p = g->adj[i].firstedg;
  7.         while (p != NULL){
  8.             //cout << "66";
  9.             cout << g->adj[p->date].date<<" ";
  10.             p = p->next;
  11.         }
  12.         cout << endl;
  13.     }
  14. }
复制代码

5. 主函数 main

  1. int main() {
  2.     Adj* T = (Adj*)malloc(sizeof(Adj));
  3.     creatTu(T, 0);
  4.     print(T);
  5.     return 0;
  6. }
  7. input:
  8. 3
  9. a b c
  10. 4
  11. 1 2
  12. 1 3
  13. 2 3
  14. 3 2
  15. 运行结果如下:
复制代码


总结

通过这段代码,我们可以看到如何使用邻接表来存储和表示图的结构。邻接表的优点是空间效率高,适合存储稀疏图。同时,我们也应该注意代码中的一些潜伏问题,如拼写错误、数组越界和内存管理等,以确保代码的精确性和健壮性。
希望本文的解析能够资助读者更好地明白图的邻接表实现,同时也为读者在现实应用中使用图数据结构提供一些参考。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4