异型链表

本文介绍了一种异型链表的实现方式,该链表能够容纳不同类型的节点,并通过虚函数机制实现统一的操作接口。文章提供了具体的代码示例,包括如何创建节点、添加节点以及遍历整个链表。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >



异型链表(每个节点中类型都不相同)案例如下:

#include "mainwindow.h"

#include <QApplication>

#include<QPushButton>

#include<QLabel>

 

//异型链表

 

class base

{

public:

    virtual  void  show()=0;

};

 

class node

{

 public:

      base *p;       //数据域

      node *pNext;//指针域

};

 

void showall(node *phead)

{

    while(phead!=NULL)

    {

 

      phead->p->show();

      phead= phead->pNext;

    }

 

}

 

node * add(node *phead, base *p)//改变一个指针需要二级指针,否则需要返回值并赋值

{

    if(phead==NULL)

    {

       //phead=p;

       node *px= new node;//开辟节点

       px->pNext=NULL;//最后一个节点为空

       px->p=p;//存储传过来的指针

 

       phead =px;//连接

 

       return phead;

 

    }

    else

    {

       node *pbak=phead;//保存头结点地址

       while(phead->pNext!=NULL)//遍历到最后一个节点

       {

 

          phead=phead->pNext;

       }

       node *px= new node;//开辟就诶点

       px->pNext=NULL;//最后一个节点为空

       px->p=p;//存储传过来的指针

 

       phead->pNext=px;//连接这个就诶点

 

       return pbak;

    }

}

 

class button:public base

{

public:

    QPushButton w;

    void show()

    {

       w.show();

    }

};

class window:public base

{

public:

    MainWindow  w;

    void show()

    {

       w.show();

    }

};

 

class  label:public base

{

public:

    QLabel  w;

    void show()

    {

       w.show();

    }

};

 

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

{

    QApplication a(argc, argv);

    node *phead=NULL;//指针必须初四化

    button b1,b2,b3;

    window w1,w2,w3;

    label l1,l2,l3;

 

    phead=add(phead,&b1);

    phead=add(phead,&w1);

    phead=add(phead,&l1);

    showall(phead);

    return a.exec();

}

 

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

{

    QApplication a(argc, argv);

    node *phead;

    button b1,b2,b3;

    window w1,w2,w3;

    label l1,l2,l3;

 

    node node1,node2,node3,node4;

    phead=&node1;

    node1.pNext=&node2;

    node2.pNext=&node3;

    node3.pNext=&node4;

    node4.pNext=NULL;//串联起来

    node1.p=&b1;

    node2.p=&w1;

    node3.p=&l1;

    node4.p=&b2;

    showall(phead);

    return a.exec();

}

 

 

 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

涂作权的博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值