ZBLOG

#include #include template struct EdgeNode { int adjvex; E weight; EdgeNode *next; }; template struct VertexNode { T data; EdgeNode *firstEdge; }...

可以将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助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://sdn.0voice.com/?id=2537

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?