一、
目標實現乙個鍊錶,其中的元素型別可以不同。
二、思路
【思路一】
在結點中用共用體儲存資料,用
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
c = 'a'
; c
< 'c'
+1
; ++c
)
0045
0046 //插入自定義類
0047 for
(int
i = 0
; i
< 3
; ++i
)
0054
0055 cout
<< "遍歷鍊錶:"
<<endl
;
0056 for
(hli
i = testlist
.begin
(); i
!=testlist
.end
(); ++i
)
0059 //銷毀異質鍊錶。注意:如果鍊錶元素是自定義類指標,先要銷毀該指標
0060 //所指向的物件
0061 cout
<< "銷毀鍊錶:"
<<endl
;
0062 int
j=0
;
0063 for
(hli
i = 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 將物件新增進鍊表,變成...