您的位置:首页 > 编程语言 > C语言/C++

研究生本科生的创建C++链表

2015-06-16 17:45 507 查看
#include<iostream>
#include<string>
using namespace std;
class Student
{
public:

virtual void display(){};

string name;

string number;

Student *next;

Student();

Student(const string &na, const string&no):name(na),number(no){}

virtual ~Student();
};

typedef Student NODE;

typedef Student *LIST;

typedef LIST     PNODE;

Student::Student()
{

}

Student::~Student()
{

}

class Graduate : public Student
{
public:

string tutor;

virtual void display();

Graduate();

Graduate(const string& na, const string& no,const string& tn):Student(na,no),tutor(tn){}

virtual ~Graduate();

friend ostream& operator<<(ostream& os, const Graduate& stu );
};

Graduate::Graduate()
{

}

Graduate::~Graduate()
{

}

void Graduate::display()
{

}

ostream& operator<<(ostream&os, const Graduate& stu )
{
os<<"研究生:"<<stu.name<<",\t学号: "<<stu.number<<",\t导师:"<<stu.tutor<<endl;

return os;
}

class UnderGrad : public Student
{
public:

UnderGrad();

UnderGrad(const string&na, const string&no):Student(na,no){}

virtual ~UnderGrad();

friend ostream& operator<<(ostream&os, const UnderGrad& stu);
};

UnderGrad::UnderGrad()
{

}

UnderGrad::~UnderGrad()
{

}

ostream& operator<<( ostream&os, const UnderGrad& stu )
{
os<<"本科生:"<<stu.name<<",\t学号: "<<stu.number<<endl;

return os;
}

LIST createList()
{
char c='y';

PNODE p,tail;

PNODE list= new NODE;

string nm,no,tname;

list->next=NULL;

tail = list;

do{
cout<<"创建学生,类型(U)本科生,(G)研究生,(E)结束:";

cin>>c;

if(c=='E'||c=='e')

break;

switch(c)
{
case 'u':case 'U':

cout<<"本科生\n学号:";

cin>>no;

cout<<"姓名:";

cin>>nm;

p= new UnderGrad(nm, no);

break;

case 'g':case 'G':

cout<<"研究生\n学号:";

cin>>no;

cout<<"姓名:";

cin>>nm;

cout<<"导师姓名:";

cin>>tname;

p = new Graduate(nm,no,tname);

break;

default:

cout<<"类型错误!"<<endl;

break;
}
if(p)
{
tail->next = p;

tail     = p;

tail->next = NULL;
}

p=NULL;
}

while(1);

return list;
}

void destroyList(LIST list)
{
PNODE head=list,p;

Graduate *pg;

UnderGrad *pu;

cout<<"销毁链表"<<endl;

if(!head) return;

while((p=head)!=NULL)
{
if(pg = dynamic_cast<Graduate*>(p))

cout<< *pg;

else if(pu = dynamic_cast<UnderGrad*>(p))

cout<< *pu;

head = p ->next;

delete p;
}
}
<img src="https://img-blog.csdn.net/20150616174529583?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvaGVsbG93b3JsZDEyNzA0MjQ3ODk=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" />
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c++ 链表