求大神c++ 类型: 以下是一个List类模板的定义:

以下是一个List类模板的定义:template<classT>classList{public:List();//构造函数voidAdd(T&);//在Link表头添加... 以下是一个List类模板的定义:
template<class T> class List{
public:
List(); //构造函数
void Add(T&); //在Link表头添加新结点
void Remove(T&); //在Link中删除含有特定值的元素
T* Find(T&); //查找含有特定值的结点
void PrintList(); // 打印输出整个链表
~List();
protected:
struct Node{
Node* pNext;
T* pT;
};
Node *pFirst; //链首结点指针
};
完成对上述List类模板含有的各成员函数的定义。然后定义一个简单的Student类,并利用编写的List类模板对一个班级的学生进行动态管理。(根据自己的能力选做)。
提示:要编写出这个程序,要理解Link类模板中各数据成员的含义。pFirst代表链表首指针,Node代表链表的一个结点,pT为指向该结点对应数据的指针,理解这点非常重要。
展开
 我来答
人生做回自己
推荐于2018-04-05 · TA获得超过423个赞
知道小有建树答主
回答量:722
采纳率:100%
帮助的人:517万
展开全部

参考如下代码:

#include <iostream>
#include <fstream>
#include <stdlib.h>
#include <string.h>
using namespace std;
#include<stdio.h>
#include<string>

#include "math.h"

template<class T> class List{
public:
    List()  //构造函数
    {
        pFirst = NULL;
    }
    
    void Add(T& t)  //在Link表头添加新结点
    {
        if(pFirst == NULL)
        {
            pFirst = new Node;
            *(pFirst->pT) = t;
        }
        else
        {
            Node* pNewNode = new Node;
            *(pNewNode->pT) = t;
            pNewNode->pNext = pFirst;
            pFirst = pNewNode;
        }
    }

  void Remove(T& t) //在Link中删除含有特定值的元素
    {
        Node* pNode = pFirst;
        if(*(pNode->pT) == t)
        {
            pFirst = pFirst->pNext;
            delete pNode;
            return;
        }
        while(pNode != NULL)
        {
            Node* pNextNode = pNode->pNext;
            if(pNextNode!=NULL)
            {
                if(*(pNextNode->pT) == t)
                {
                    pNode->pNext = pNextNode->pNext;
                    delete pNextNode;
                    return;
                }
            }
            else
                return;//没有相同的

            pNode = pNode->pNext;
        }
    }
  T* Find(T& t)  //查找含有特定值的结点
    {
        Node* pNode = pFirst;
        while(pNode != NULL)
        {
            if(*(pNode->pT) == t)
            {
                return pNode->pT;
            }
            pNode = pNode->pNext;
        }
        return NULL;
    }
  void PrintList()  // 打印输出整个链表
    {
        if(pFirst == NULL)
        {
            cout<<"列表为空列表!"<<endl;
            return;
        }
        Node* pNode = pFirst;
        while(pNode != NULL)
        {
            cout<<*(pNode->pT)<<endl;
            pNode = pNode->pNext;
        }
    }
  ~List()
    {
        Node* pNode = pFirst;
        while(pNode != NULL)
        {
            Node* pNextNode = pNode->pNext;
            delete pNode;
            pNode = pNextNode;
        }
    }
protected:
  struct Node{
    Node* pNext;
    T* pT;

    Node()
    {
        pNext = NULL;
        pT = new T;
    }
    ~Node()
    {
        delete pT;
    }
  };
  Node *pFirst;        //链首结点指针
};

class Student
{
public:
    char id[20];    //学号
    char name[20];    //姓名
    int age;    //年龄
    Student()
    {
    }
    ~Student()
    {
    }
    Student(const char* pid, const char* pname, int _age)
    {
        strcpy(id, pid);
        strcpy(name, pname);
        age = _age;
    }
    bool operator==(const Student& stu)
    {
        return strcmp(id, stu.id) == 0 && strcmp(id, stu.id) == 0 && age==stu.age;
    }
    Student& operator=(const Student& stu)
    {
        strcpy(id, stu.id);
        strcpy(name, stu.name);
        age = stu.age;
    }
    friend ostream& operator<< (ostream &out,const Student& stu);
};
ostream & operator<< (ostream &out,const Student& stu)
{
    out<<"id:"<<stu.id<<"\tname:"<<stu.name<<"\tage:"<<stu.age<<endl;
}

int main()
{
    List<Student> stuList;
    cout<<"添加学生前:"<<endl;
    stuList.PrintList();
    
    Student stu1("1", "张三", 18);
    Student stu2("2", "李四", 18);
    Student stu3("3", "王五", 18);
    Student stu4("4", "至尊宝", 18);
    Student stu5("5", "猪八戒", 18);
    Student stu6("6", "唐僧", 18);
    Student stu7("7", "沙和尚", 18);
    Student stu8("8", "观音", 18);
    stuList.Add(stu1);
    stuList.Add(stu2);
    stuList.Add(stu3);
    stuList.Add(stu4);
    stuList.Add(stu5);
    stuList.Add(stu6);
    stuList.Add(stu7);
    stuList.Add(stu8);
    cout<<"添加学生后:"<<endl;
    stuList.PrintList();


    Student stu11("1", "张三", 18);
    Student* pStu = stuList.Find(stu11);
    cout<<"查找到的同学是:"<<*pStu;

    stuList.Remove(stu11);
    cout<<"\n\n删除第一个后:"<<endl;
    stuList.PrintList();

    return 0;
}
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式