异质链表可以包含派生于同一个基类的不同元素。首先我们看看主程序和运行结果:
void main()
{
Person ps1(0, "Tom", "19850615", 'M');
Person ps2(0, "Jam", "19850637", 'M');
Student st1(0, "Mike", "92876639", 'M', 100);
Staff sf1(0, "Stephen", "00187740", 'M', 1002000);
HeterList<Person> myList;
//从尾部加入链表
myList.Insert(&ps1);
myList.Insert(&st1);
myList.Insert(&sf1);
//将元素插入指定位置
myList.Insert(1, &ps2);
myList.Print();
//逐个删除
myList.Delete();
myList.Delete();
myList.Print();
}
首先,我们不急着去实现异质链表,而是实现一个普通链表。链表的元素是Person类
class Person
{
public:
Person(int id, string name = "", string birth = "", char sex = ' ')
:m_identity(id), m_name(name), m_birth(birth), m_sex(sex)
{}
/*
virtual void Print()
将基本信息逐行打印
*/
virtual void Print()
{
cout << "name: " << m_name << endl;
cout << "id: " << m_identity << endl;
cout << "birth: " << m_birth << endl;
cout << "sex: " << m_sex << endl;
}
protected:
int m_identity;
string m_name;
string m_birth;
//‘M’代表男性,‘F’代表女性
char m_sex;
};
然后自己写一个链表,主要方法包括:Insert(), Delete(), Print()。这里使用了友元类的方法,方便链表对元素值直接读取。
/*********链表***********/
template<class Type> class HeterList;//declare before used as friend class
template<class Type>
class Node
{
friend class HeterList<Type>;
public:
Node() : m_data(NULL), m_next(NULL)
{}
Node(Type* data) : m_data(data), m_next(NULL)
{}
void Print()
{
m_data->Print();
}
private:
Type* m_data;
Node<

1130

被折叠的 条评论
为什么被折叠?



