zoukankan      html  css  js  c++  java
  • 邻接表存储的实现(改进版)

    邻接表的实现(改进版)

         这次代码是在上一次实现邻接表的基础上进行的改进,减少了一个类(用于存储横向结构即直接相邻节点的类),同时在Headlinklist增设了一个Topoint类的end指针用于为每个出发点插入相应的邻接节点,较上次代码来说减少了很多指针,结构上大大简化,降低了思维难度,比较容易想清楚结构。

    矩阵中存储的图的结构如下:

    实现代码如下:

    #include <iostream>
    #include <string.h>
    using namespace std;
    #define WHITE -1;
    #define GRAY 0;
    #define BLACK 1;
    class Topoint
    {
        public:
        string topointname;
        int topointweight;
        int topointcolor;
        Topoint* nexto;
        Topoint()
        {
            nexto=NULL;
        }
        Topoint(string _topointname,int _topointweight,int _topointcolor)
        {
            topointname=_topointname;
            topointweight=_topointweight;
            topointcolor=_topointcolor;
            nexto=NULL;
        }
        void Display()
        {
            cout<<"ToPoint name: "<<topointname<<" weight: "<<topointweight<<" pointcolor: "<<topointcolor<<endl;
        }
    };
    class Frompoint
    {
        public:
        string frompointname;
        int frompointcolor;
        Frompoint* nextpoint;
        Topoint* nextopoint;
        Frompoint()
        {
            nextpoint=NULL;
            nextopoint=NULL;
        }
        Frompoint(string _frompointname,int _frompointcolor)
        {
            frompointname=_frompointname;
            frompointcolor=_frompointcolor;
            nextopoint=NULL;
            nextpoint=NULL;
        }
        void Display()
        {
            cout<<"Frompoint name: "<<frompointname<<" pointcolor: "<<frompointcolor<<endl;
        }
    };
    class Headlinklist
    {
        public:
        Frompoint* head;
        Frompoint* rear;
        Topoint* end;
        Headlinklist()
        {
            head=NULL;
            rear=NULL;
            end=NULL;
        }
        int InsertFrompoint(string frompointname,int frompointcolor)              //竖直方向添加节点
        {
            Frompoint* p=new Frompoint(frompointname,frompointcolor);
            if(head==NULL)
            {
                head=rear=p;
                return 1;
            }
            else
            {
                rear->nextpoint=p;
                rear=rear->nextpoint;
                return 1;
            }
            return 0;
        }
        int InsertTopoint(string _topointname,int _topointweight,int _topointcolor)         //横向添加节点
        {
            Topoint* p=new Topoint(_topointname,_topointweight,_topointcolor);
            if(rear->nextopoint==NULL)
            {
                rear->nextopoint=p;
                end=p;
                return 1;
            }
            else
            {
                end->nexto=p;
                end=end->nexto;
                return 1;
            }
            return 0;
        }
        void Display()
        {
            Frompoint* p=head;
            while(p!=NULL)
            {
                cout<<"出发节点:"<<endl;
                p->Display();
                Topoint* q=p->nextopoint;
                cout<<"直接邻接节点:"<<endl;
                while(q!=NULL)
                {
                    q->Display();
                    q=q->nexto;
                }
                p=p->nextpoint;
            }
        }
    };
    int main()
    {
        Headlinklist head;
    
        head.InsertFrompoint("1",-1);
        head.InsertTopoint("2",1,-1);
        head.InsertTopoint("5",1,-1);
    
        head.InsertFrompoint("2",-1);
        head.InsertTopoint("1",1,-1);
        head.InsertTopoint("3",1,-1);
        head.InsertTopoint("4",1,-1);
        head.InsertTopoint("5",1,-1);
    
        head.InsertFrompoint("3",-1);
        head.InsertTopoint("2",1,-1);
        head.InsertTopoint("4",1,-1);
    
        head.InsertFrompoint("4",-1);
        head.InsertTopoint("2",1,-1);
        head.InsertTopoint("3",1,-1);
        head.InsertTopoint("5",1,-1);
    
        head.InsertFrompoint("5",-1);
        head.InsertTopoint("1",1,-1);
        head.InsertTopoint("2",1,-1);
        head.InsertTopoint("4",1,-1);
    
        head.Display();
        return 0;
    }
    

    输出结果如下:

    态度决定高度,细节决定成败,
  • 相关阅读:
    Rainmeter 雨滴桌面 主题分享
    行人检測之HOG特征(Histograms of Oriented Gradients)
    const和readonly差别
    ADB命令解析
    Java实现 蓝桥杯VIP 算法训练 接水问题
    Java实现 蓝桥杯VIP 算法训练 星际交流
    Java实现 蓝桥杯VIP 算法训练 星际交流
    Java实现 蓝桥杯VIP 算法训练 星际交流
    Java实现 蓝桥杯VIP 算法训练 星际交流
    Java实现 蓝桥杯VIP 算法训练 星际交流
  • 原文地址:https://www.cnblogs.com/lxk2010012997/p/2839629.html
Copyright © 2011-2022 走看看