简单无向图(c++版)

本文介绍了使用C++编程实现无向图的数据结构,包括Graph.h头文件和main.cpp源代码,通过测试文件test.txt进行运行验证。内容涵盖图的边连接及节点操作。
摘要由CSDN通过智能技术生成

Graph.h

#pragma once
#include <string>
#include <sstream>
#include <fstream>
#include <iterator>
#include <stack>
#include <queue>

class Graph
{
private:
    class EdgeList
    {
   
    public:
        class Node
        {
   
        public:
            int link;
            Node* next = nullptr;
        public:
            Node(const int& n) :link(n)
            {

            }
        };
        Node* head = nullptr;
    public:
        class Iterator
        {
   
        private:
            Node* it;
        public:
            Iterator(Node* i) :it(i) {}
            Iterator operator++()
            {
                it = it->next;
                return *this;
            }
            Iterator operator++(int)
            {
                Node* i = it;
                it = it->next;
                return Iterator(i);
            }
            bool operator == (const Iterator& rhs)
            {
                if (it == nullptr && rhs.it == nullptr)
                    return true;
                if (it != nullptr && rhs.it != nullptr)
                {
                    if (it == rhs.it)
                        return true;
                }
                return false;
            }
            bool operator != (const Iterator& rhs)
            {
                return !(*this == rhs);
            }
            const int& operator *()
            {
                if (it == nullptr)
                    throw std::logic_error("* nullptr error");
                return it->link;
            }
        };
/******************************************
函数名称:   begin
函数说明:   返回迭代器begin位置
*******************************************/
        Iterator begin()const
        {
            return Iterator(head);
        }
/******************************************
函数名称:   end
函数说明:   返回迭代器尾部也就是nullptr
返回值     Iterator
*******************************************/
        Iterator end()const
        {
            return Iterator(nullptr);
        }
/******************************************
函数名称:   addNode
函数说明:   给邻接表增加节点
返回值:        void
*******************************************/
        void addNode(const int& link)
        {
            if (head == nullptr)
            {
                head = new Node(link);
                return;
            }
            Node* curr = head;
            while (curr->next != nullptr)
                curr = curr->next;
            curr->next = new Node(link);
            return;
        }
    };
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值