..

邻接表的理解、实现、遍历

邻接表数据结构一般是用来存图结构的,因为树是一种特殊的图,也可以使用邻接表来存树结构

下面使用数组实现的邻接表是使用头插法存储节点的。

#include <iostream>
#include <algorithm>

using namespace std;

const int N = 10;

/**
* head 表示头节点的下标
* e[i] 表示节点i的值
* ne[i] 表示节点i的next指针是多好
* idx 存储当前最新已经用到了哪一个点了
*/
int h[N], e[N], ne[N], idx;
int n;

void add(int a, int b)
{
  e[idx] = b, ne[idx] = h[a], h[a] = idx++;
}

void dfs(int u)
{
  for (int i = h[u]; ~i; i = ne[i])
  {
    printf("%d\n", e[i]);
    dfs(e[i]);
  }
}

int main()
{
  scanf("%d", &n);

  memset(h, -1, sizeof h);

  while(n--)
  {
    int a, b;
    scanf("%d%d", &a, &b);
    // 这里如果要明确区分左右子树的话需要注意一下输入的顺序
    add(a, b);
  }

  dfs(1); 
  return 0;
}

输入值

6
1 3
1 2
3 7
3 6
2 5
2 4
Tags: [ linklist  ]