异型链表
異型鏈表(每個節點中類型都不相同)案例如下:
#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();
}
?
?
?
?
?
?
?
?
?
?
?
?
總結
- 上一篇: 静态联编,动态联编,类指针之间的关系,虚
- 下一篇: 类模板,多种类型的类模板,自定义类模板,