• 邻接矩阵实现(初始版)


    邻接矩阵实现:

    运用了链式结构,其中包括一条用来存储起始节点的链表(纵向),另外一条用来存储与特定的起始点直接相邻的邻接点(横向);有待改进的是对于横向结构链表的存储存在头结点的冗余,因为在纵向结构中为了将其连接起来也为其设置了头结点。

    代码如下:

    #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 Topointlinklist
    {
        public:
        Topoint* head;
        Topoint* rear;
        Topointlinklist()
        {
            head=NULL;
            rear=NULL;
        }
        int InsertTopoint(string topointname,int topointweight,int topointcolor)
        {
            Topoint* p=new Topoint(topointname,topointweight,topointcolor);
            if(head==NULL)
            {
                head=rear=p;
                return 1;
            }
            else
            {
                rear->nexto=p;
                rear=rear->nexto;
                return 1;
            }
            return 0;
        }
        void Display()
        {
            Topoint* p=head;
            cout<<"横向遍历:"<<endl;
            while(p!=NULL)
            {
                p->Display();
                p=p->nexto;
            }
        }
    };
    class Headlinklist
    {
        public:
        Frompoint* head;
        Frompoint* rear;
        Headlinklist()
        {
            head=NULL;
            rear=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;
        }
        void InsertTopointList(Topointlinklist t)
        {
            rear->nextopoint=t.head;
        }
        void Display()
        {
            Frompoint* p=head;
            cout<<"纵向遍历起始节点:"<<endl;
            while(p!=NULL)
            {
                p->Display();
                p=p->nextpoint;
            }
        }
    };
    int main()
    {
        Headlinklist head1;
        Topointlinklist list1;
        head1.InsertFrompoint("1",-1);
        list1.InsertTopoint("1",1,-1);
        list1.InsertTopoint("2",1,-1);
        list1.InsertTopoint("3",1,-1);
        head1.InsertTopointList(list1);
    
    
        Topointlinklist list2;
        head1.InsertFrompoint("2",-1);
        list2.InsertTopoint("2",1,-1);
        list2.InsertTopoint("3",1,-1);
        list2.InsertTopoint("4",1,-1);
        head1.InsertTopointList(list2);
    
        list1.Display();
        list2.Display();
        head1.Display();
    }
    

      

    态度决定高度,细节决定成败,
  • 相关阅读:
    2021找工作总结
    HashMap源码(JDK1.8)-手动注释
    HashMap底层源码分析-手动注释
    面试常问的ArrayQueue底层实现
    SVN使用方法
    async await Task 使用方法
    视觉设备说明
    Java8--lambda表达式与函数式编程
    重磅!微软发布 vscode.dev,把 VS Code 带入浏览器!
    解决Vite-React项目中js使用jsx语法报错的问题
  • 原文地址:https://www.cnblogs.com/lxk2010012997/p/2839594.html
Copyright © 2020-2023  润新知