数据结构相关题目

来源:互联网 发布:便携式打印机 知乎 编辑:程序博客网 时间:2024/06/05 07:15

#include <iostream.h>

#include <string.h>

#include <conio.h>

 

class Student {

         friend class List;

protected:

         char name[20];

         int number;

         static Student *ptr;

         Student *next;

public:

         Student(char *,int);

         virtual void print();

         virtual void insert(){};

};

 

class UnderGrad:public Student{

         friend class List;

         int level;

public:

         UnderGrad(char *,int,int);

         void print();

         void insert();

};

class Graduate:public Student{

         friend class List;

         char teaname[20];

public:

         Graduate(char *,int,char *);

         void print();

         void insert();

};

 

class List   //定义异质链表类

{

Student *root;

public:

         List(){root=0;}

         void insert_Student(Student *node);

         void remove(char *name);

         void print_List();

};

 

Student::Student(char *name,int number){

         strcpy(Student::name,name);

         Student::number=number;

         next=0;

}

 

void Student::print(){   //输出基类数据成员

cout<<"name:"<<name<<"\n";

cout<<"number:"<<number<<"\n";

}

 

UnderGrad::UnderGrad(char *name,int number,int level):Student(name,number){

         UnderGrad::level=level;

}

void UnderGrad::print(){

         Student::print();

         cout<<"level:      "<<level<<"\n";

}

void UnderGrad::insert(){

ptr=new UnderGrad(name,number,level);

}

 

Graduate::Graduate(char *name,int number,char *teaname):Student(name,number){

         strcpy(Graduate::teaname,teaname);

}

void Graduate::print(){

         Student::print();

         cout<<"teacher's name: "<<teaname<<"\n";

}

void Graduate::insert(){

ptr=new Graduate(name,number,teaname);

}

 

void List::insert_Student(Student *node){

char key[20];

strcpy(key,node->name);

Student *curr_node=root;

Student *previous=0;

while(curr_node!=0 && strcmp(curr_node->name,key)<0){

previous=curr_node;

curr_node=curr_node->next;

}

node->insert();

node->ptr->next=curr_node;

if(previous==0)

         root=node->ptr;

else previous->next=node->ptr;

}

 

void List::remove(char *name){

Student *curr_node=root;

Student *previous=0;

while(curr_node!=0 && strcmp(curr_node->name,name)!=0){

previous=curr_node;

curr_node=curr_node->next;

}

if(curr_node!=0 && previous==0){

root=curr_node->next;

delete curr_node;

}

else if(curr_node!=0 && previous!=0){

previous->next=curr_node->next;

delete curr_node;

}

}

 

void List::print_List (){

Student *cur=root;

while(cur!=0){

cur->print();

cur=cur->next;

}

}

 

Student *Student::ptr=0;

 

void main(){

List people;

UnderGrad und("Zhangshan",000111,2);

Graduate  gra("Lisi",012121,"Wangermazi");

people.insert_Student(&und);

people.insert_Student (&gra);

people.print_List ();

getch;

people.remove ("Zhangshan");

people.remove ("Lisi");

people.print_List ();

}

0 0
原创粉丝点击