可以将vector
头文件替换为数组,实现类似的功能。下面是修改后的代码:
#include <iostream>
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, int MaxSize>
class GraphLink {
private:
VertexNode<T, E> vertexList[MaxSize]; // 顶点数组
public:
void insertVertex(T data) {
VertexNode<T, E> vNode;
vNode.data = data;
vNode.firstEdge = nullptr;
for (int i = 0; i < MaxSize; i++) {
if (vertexList[i].firstEdge == nullptr) {
vertexList[i] = vNode;
break;
}
}
}
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 < MaxSize; 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() {
const int MaxSize = 5; // 最大顶点数
GraphLink<char, int, MaxSize> 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;
}
这样就将原先使用vector
的部分改为了固定大小的数组。请注意,此代码示例中假设顶点数不超过 MaxSize
,需要根据实际情况调整 MaxSize
的值。
内容由零声教学AI助手提供,问题来源于学员提问