c++ 邻接表数据结构的实现

浏览:50日期:2023-05-09

问题描述

我想写出邻接表的实现,adjacency_list_vnode是图中每一个点的存储结构,我在adjacency_list中声明了一个指向adjacency_list_vnode数组的指针,因为我希望能够根据点的数量动态生成指定大小的邻接表,但是在初始化函数initAdjacencyList(int v)中好像不能通过vlist[i]的形式访问到每一个adjacency_list_vnode,麻烦大家帮忙看看是什么问题;另外linklist是我写的另一个类,有创建插入删除节点的功能,被每一个adjacency_list_vnode中的p指针指向,我这样写有没有问题呢

private: struct adjacency_list_vnode {int number;LinkList<int> *p; }; struct adjacency_list {int v, e;adjacency_list_vnode *vlist; }*adjacency_listx; void initAdjacencyList(int v) {adjacency_listx = new adjacency_list;adjacency_listx->v = v;adjacency_listx->e = 0; adjacency_listx->vlist = new adjacency_list_vnode[v]; //我希望能通过vlist访问vnode数组for (int i = 0; i < 1; i++) {adjacency_listx->vlist->number = i; //!!!!这里有问题 adjacency_listx->vlist->p = new LinkList<int>; //!!!!这里有问题} }public: GraphDataStructure(int v) {initAdjacencyList(v); }

问题解答

回答1:

我没有实际运行你的代码,不过发现了2个问题:

for (int i = 0; i < 1; i++) {adjacency_listx->vlist->number = i; //!!!!这里有问题 adjacency_listx->vlist->p = new LinkList<int>; //!!!!这里有问题}

循环控制条件i < 1不对吧? 应该是 i < v, 循环体赋值语句应该是下面这样

for (int i = 0; i < v; i++) {adjacency_listx->vlist[i].number = i; //!!!!这里有问题 adjacency_listx->vlist[i].p = new LinkList<int>; //!!!!这里有问题}

相关文章: