数据结构相关题目

#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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值