c++链表重载

#include  <iostream>
using  namespace  std;
class  Student
{
public:
    Student(string  id = "", string  name = "");
    virtual  ~Student();

    string  Getid() { return  mId; }
    void  Setid(string  val) { mId = val; }
    string  GetName() { return  mName; }
    void  SetName(string  val) { mName = val; }
    void  Show()
    {
        cout << "ID:" << this->mId << "    Name:" << this->mName << endl;
    }
protected:

private:
    string  mId;
    string  mName;
};
Student::Student(string  id, string  name)
{
    this->mId = id;
    this->mName = name;
}

Student::~Student()
{
    //dtor
}
class  LinkList;
class  Node
{
public:
    Node(const  Student& t);
    Node(string  id, string  name);
    virtual  ~Node();
    Student  GetData() { return  mData; }
    void  SetData(Student  val) { mData = val; }
    Node* GetNext() { return  mNext; }
    void  SetNext(Node* val) { mNext = val; }
    friend  class  LinkList;
protected:

private:
    Student  mData;
    Node* mNext;
};
Node::Node(const  Student& t) :mData(t)
{
    //ctor
    this->mNext = NULL;
}
Node::Node(string  id="", string  name="") : mData(id, name)
{
    this->mNext = NULL;
}
Node::~Node()
{
    //dtor
}

class  LinkList
{
public:
    LinkList();
    LinkList(const  LinkList& list1);
    virtual  ~LinkList();
    void  InsertNodeAtHead(const  Student& t);
    //      void  InsertNodeAtTail(const  Student  &t);
    //      void  DeleteNodeByID(string  id);
    void  Show();
    void  DeleteLinkList();
    LinkList    operator  =(const  LinkList& list1);
protected:
    Node* mHead;
    void  copylist(const  LinkList& list1);
    //  Node  *mTail;
    int  mLen;
};
LinkList::LinkList()
{
    //ctor
    this->mHead = NULL;
    this->mLen = 0;
}

LinkList::~LinkList()
{
    this->DeleteLinkList();
}
void  LinkList::InsertNodeAtHead(const  Student& t)
{
    Node* temp;
    temp = new  Node(t);
    if (this->mHead == NULL)
    {
        this->mHead = temp;
        this->mLen++;
    }
    else
    {
        temp->mNext = this->mHead;
        this->mHead = temp;
        this->mLen++;
    }
}
void  LinkList::Show()
{
    Node* temp;
    temp = this->mHead;
    while (temp != NULL)
    {
        temp->mData.Show();
        temp = temp->mNext;
    }
}
void  LinkList::DeleteLinkList()
{
    if (mHead != NULL) {
        Node* pTmp;
        while (mHead != NULL) {
            pTmp = mHead->mNext;
            delete mHead;
            mHead = pTmp;
        }
    }

}
LinkList::LinkList(const  LinkList& list1)
{
    Node* p,*q;
    q = list1.mHead;
    p = this->mHead=new Node(*q);
    this->mLen = list1.mLen;
    if (q != NULL)
    {
        q = q->mNext;
        while (q != NULL)
        {
            p->mNext = new Node(*q);
            p = p->mNext;
            q = q->mNext;

        }
    }
}
void  LinkList::copylist(const  LinkList& list1)
{
    Node* p;
    this->mLen = list1.mLen;
    p = list1.mHead;
    if (p != NULL)
    {
        Node* q;
        q = this->mHead = new  Node(*p);
        p = p->mNext;
        while (p != NULL)
        {
            q->mNext= new Node(*p);
            p = p->mNext;
            q = q->mNext;
        }
    }
}
LinkList LinkList::operator  =(const  LinkList& list1)
{
    copylist(list1);
    return *this;
}

int  main()
{
    LinkList  list1, list2;
    int  n;
    string  id, name;
    cin >> n;
    Student  st;
    for (int i = 0; i < n; i++)
    {
        cin >> id >> name;
        st.Setid(id);
        st.SetName(name);
        list1.InsertNodeAtHead(st);
    }
    list1.Show();
    list2 = list1;
    list2.Show();
    list2.InsertNodeAtHead(Student("1005", "Test"));
    LinkList  list3(list2);
    list1.Show();
    list2.Show();
    list3.Show();
    cout << "Over!" << endl;
    return  0;
}

  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值