异质链表

Posted xiangtingshen

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了异质链表相关的知识,希望对你有一定的参考价值。

 

程序中,用基类类型指针,可以生成一个连接不同派生类对象的动态链表,

即每个节点指针可以指向类层次中不同的派生类对象。

这种节点类型不相同的链表称为异质链表。

如:任务管理器,管理不同的进程

 

 

#include "dialog.h"
#include <QApplication>
#include <QLabel>
#include <QPushButton>

class Base

public:
    virtual void show() = 0;
    virtual ~Base()
;

class Node

public:
    Node *next;
    Base *data;
;

class YiZhiLinkList

public:
    YiZhiLinkList()
    
        head = nullptr;
    
    ~YiZhiLinkList()
    
        if(head != nullptr) 
            delete head->data;
            head = head->next;
        
    

    Node* add(Base *base)
    
        if (head == nullptr)
            head = new Node();
            head->data = base;
            head->next = nullptr;
        
        else 
            Node *tmp = head;
            Node *n = new Node();
            n->data = base;
            n->next = nullptr;

            while(tmp->next != nullptr) 
                tmp = tmp->next;
            

            tmp->next = n;

        
        return head;
    
    void show()
    
        while (head != nullptr) 
            head->data->show();
            head = head->next;
        
    

private:
    Node *head;

;

class MyLable:public Base

private:
    QLabel label;
public:
    MyLable()

    
    ~MyLable()

    
    void show()
    
        label.setText("This is label");
        label.show();
    
;

class MyButton:public Base

private:
    QPushButton button;
public:
    MyButton()

    
    ~MyButton()

    
    void show()
    
        button.setText("This is button");
        button.show();
    
;

class MyDialog:public Base

private:
    Dialog w;
public:
    MyDialog()

    
    ~MyDialog()

    
    void show()
    
        w.show();
    
;

int main(int argc, char *argv[])

    QApplication a(argc, argv);

    Base *l = new MyLable();
    Base *b = new MyButton();
    Base *d = new MyDialog();

    YiZhiLinkList Yi;
    Yi.add(l);
    Yi.add(b);
    Yi.add(d);

    Yi.show();

    return a.exec();

 

以上是关于异质链表的主要内容,如果未能解决你的问题,请参考以下文章

数据结构-链表链表的基本操作

数据结构-链表链表的相关算法

[11道链表经典笔试题]优化的算法思想:反转链表链表相交快慢指针

reorder-list——链表快慢指针逆转链表链表合并

何为链表链表示例以及翻转链表

关于相交链表带环链表链表深拷贝的思路整理