異質鍊錶的實現

2021-03-31 08:56:58 字數 4590 閱讀 7952

一、

目標實現乙個鍊錶,其中的元素型別可以不同。

二、思路

【思路一】

在結點中用共用體儲存資料,用

void*

指標指向下乙個結點,並且在結點中記錄本結點的資料型別。

0000    enum

type

;

0001    struct

node

value

;

0008           void

*next

;

0009    };

鍊錶的每乙個元素其實還都是一樣的

【思路二】

設計乙個抽象結點類,不同資料型別的結點來繼承它。用基類的指標可以指向每乙個派生類。

【思路三】

上面兩種思路都要求資料型別已知,難以新增新的型別。於是把【思路二】略修改一下,用模板寫了派生類。

三、**

0000    #ifndef heterlist_h

0001    #define heterlist_h

0002    #include 

0003    #include 

0004    

0005    struct

pointer

;

0011    

0012    template

<typename

t>

0013    class

node

: public

pointer

0017        node

(t

data

):_data

(data

)

0018        virtual

std::ostream

& printdata

(std

::ostream

& out

)

0019                

0020        virtual

bool

operator

== (pointer

* p

)

0021        

0027        const

t getdata

() const

0028        void

setdata

(t

d)

0029        virtual

~node

();

0030    };

0031    

0032    std

::ostream

& operator

<< (std

::ostream

& out

, pointer

* p

)

0033    

0036    

0037    

0038    typedef

std::list

<pointer

*> heterlist

;

0039    typedef

std::list

<pointer

*>::iterator

hli

;

0040    

0041    #endif // heterlist_h

0000    #include 

0001    #include 

0002    #include 

0003    #include "heterlist.h"

0004    using

namespace

std;

0005    

0006    //自定義乙個簡單的類,用於測試本異質鍊錶是否可以插入自定義類

0007    //從異質鍊錶的定義可見,要求自定義類過載operator 《和==

0008    class

classnode

0012        string

getdata

()const

0013        ostream

& printdata

(ostream

& out

)

0014        bool

operator

== (classnode

n)

0015    };

0016    //避免用友元,保持類的封裝性

0017    ostream

& operator

<< (ostream

& out

, classnode

* n

)

0018    

0021    

0022    int

main

()

0023    

0040        //插入char型元素

0041        for

(char

= 'a'

; c

< 'c'

+1

; ++c

)

0045    

0046        //插入自定義類

0047        for

(int

= 0

; i

< 3

; ++i

)

0054    

0055        cout

<< "遍歷鍊錶:"

<<endl

;

0056        for

(hli

= testlist

.begin

(); i

!=testlist

.end

(); ++i

)

0059        //銷毀異質鍊錶。注意:如果鍊錶元素是自定義類指標,先要銷毀該指標

0060        //所指向的物件

0061        cout

<< "銷毀鍊錶:"

<<endl

;

0062        int

j=0

;

0063        for

(hli

= testlist

.begin

(); i

!=testlist

.end

(); ++i

,++j

)

0074            delete

*i

;

0075        }

0076    }

0077    

C 實現異質鍊錶

異質鍊錶 清翔兔 06,jan.include include using namespace std class data rec data rec int id,string n,int d,bool s id id name n date d s virtual void print clas...

實現異質單鏈錶類

大學人員分為兩類,大學人員分為兩類,一類是教學人員,一類是非教學人員。這兩類人員的資訊管理系統中一部分資訊內容不同,另一部分資訊內容相同。設教學人員的資訊包括姓名 年齡和專業編號 非教學人員的資訊包括姓名 年齡和業績評定。現邀請設計乙個能同時儲存學習教學人員和非教學人員的異質單鏈錶類。include...

C 異質鍊錶問題,希望有大佬幫忙改下bug

include include using namespace std class person person char name,char int age,char idnumber age age next null 純虛函式 virtual void addnode 0 將物件新增進鍊表,變成...