以下是使用C++编写的创建邻接表并验证的代码:
#include <iostream>
#include <vector>
template<typename T, typename E>
struct EdgeNode {
int adjvex;
E weight;
EdgeNode<T, E> *next;
};
template<typename T, typename E>
struct VertexNode {
T data;
EdgeNode<T, E> *firstEdge;
};
template<typename T, typename E>
class GraphLink {
private:
std::vector<VertexNode<T, E>> vertexList; // 顶点数组
public:
void insertVertex(T data) {
VertexNode<T, E> vNode;
vNode.data = data;
vNode.firstEdge = nullptr;
vertexList.push_back(vNode);
}
void insertEdge(int startVex, int endVex, E weight) {
EdgeNode<T, E> *newEdge1 = new EdgeNode<T, E>;
newEdge1->adjvex = endVex;
newEdge1->weight = weight;
if (vertexList[startVex].firstEdge == nullptr) {
vertexList[startVex].firstEdge = newEdge1;
newEdge1->next = nullptr;
} else {
newEdge1->next = vertexList[startVex].firstEdge;
vertexList[startVex].firstEdge = newEdge1;
}
}
void disp() const {
for (int i = 0; i < vertexList.size(); i++) {
std::cout << "顶点" << i << "(" << vertexList[i].data << "): ";
EdgeNode<T, E> *current = vertexList[i].firstEdge;
while (current != nullptr) {
std::cout << "-> [" << current->adjvex << "](" << current->weight << ")";
current = current->next;
}
std::cout << std::endl;
}
}
};
int main() {
GraphLink<char, int> G;
G.insertVertex('A'); //0号
G.insertVertex('B'); //1号
G.insertVertex('C'); //2号
G.insertVertex('D'); //3号
G.insertVertex('E'); //4号
G.insertEdge(0, 1, 1);
G.insertEdge(1, 2, 2);
G.insertEdge(2, 3, 10);
G.insertEdge(2, 4, 2);
G.insertEdge(4, 0, 4);
G.disp();
return 0;
}
这段代码实现了一个使用邻接表表示的图数据结构,并创建了一个包含5个顶点和5条边的图。insertVertex
函数用于插入顶点,insertEdge
函数用于插入边,disp
函数用于打印图的邻接表表示。
运行结果截图请参考:点击此处查看
内容由零声教学AI助手提供,问题来源于学员提问