异质链表

异质链表可以包含派生于同一个基类的不同元素。首先我们看看主程序和运行结果:

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<
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值