所谓的异质链表就是的节点元素类型可以不同。本实例采用C++抽象类和多态实现。
#include <QApplication> #include<QPushButton> #include<QLabel> // 基类 class base { public: virtual void show()=0; }; //异质链表 class LinkList { private: struct Node { base *pb;//数据域指针 Node *next; }; Node *phead; public: void addNode(base *pb) { Node *pnode = new Node; pnode->pb=pb; pnode->next=NULL; if(phead==NULL) { phead=pnode; } else//采用头插法 { pnode->next=phead; phead=pnode; } } void clearall() { if(phead==NULL) { return; } Node *pnode=phead; Node *ptmp; while(pnode!=NULL) { ptmp=pnode; pnode=pnode->next; delete ptmp; } phead=NULL; } void showall() { if(phead==NULL) { return; } Node *pnode=phead; while(pnode!=NULL) { pnode->pb->show(); pnode=pnode->next; } } LinkList() { phead=NULL; } ~LinkList() { this->clearall(); } }; class MyButton:public base { private: QPushButton bt; public: void show() { bt.setText("button"); bt.show(); } }; class MyLabel:public base { private: QLabel label; public: void show() { label.setText("label"); label.show(); } }; int main(int argc, char *argv[]) { QApplication a(argc, argv); LinkList list; MyLabel label; MyButton btn; list.addNode(&label); list.addNode(&btn); list.showall(); return a.exec(); }
运行结果:
版权声明:欢迎转载,如有不足之处,恳请斧正。
时间: 2024-11-12 05:19:59