博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
异质链表
阅读量:2386 次
发布时间:2019-05-10

本文共 3829 字,大约阅读时间需要 12 分钟。

#include 
#include
/* Name: 异质链表 Copyright: 1.0 Author: 田保兴 Date: 01/11/13 17:21 Description: Graduate(研究生)继承类Student,Student(学生)继承 Person,Person是基础类。 List保存person。 */using namespace std;//类声明完毕应该加分号class Person{//最基础类 private: friend class List; protected: char name[20]; //姓名 int age;//年龄 char address[20];//地址 char tel[20];//手机号码 static Person *ptr; Person *next; public: Person(char *,int,char *,char *); virtual void print(); //virtual 虚函数 ,virtual主要是为了以后能实现它。主要是为了继承 virtual void insert()=0; }; class Student:public Person{ //学生 private: friend class List; protected: int level;//年级 char school[20];//学校 public: Student(char *,int ,char *,char *,int ,char *); void print(); void insert(); }; class Graduate:public Student{//研究生 private: friend class List; char field[20] ;//研究领域 public: Graduate(char *,int ,char *,char *,int ,char *,char *); void print(); void insert(); };class List {//异质链表 private: Person *root;//根节点 public: List(){ root=0; } void add(Person *node); void remove(char *name); void show(); };Person::Person(char *name,int age,char *address,char *tel){ strcpy(Person::name,name); Person::age=age; strcpy(Person::address,address); strcpy(Person::tel,tel); next=0; }void Person::print(){ cout<<"\nname:"<
<<"\n"; cout<<"age:"<
<<"\n"; cout<<"address:"<
<<"\n"; cout<<"telephone number:"<
<<"\n"; }Student::Student(char *name,int age,char *address,char *tel,int level,char *school):Person(name,age,address,tel){ Student::level=level; strcpy(Student::school,school); }//构造函数void Student::print(){ Person::print(); cout<<"level:"<
<<"\n"; cout<<"school :"<
<<"\n"; }void Student::insert(){ ptr=new Student(name,age,address,tel,level,school);}Graduate::Graduate(char *name,int age,char *address,char *tel,int level,char *school,char *field):Student(name,age,address,tel,level,school){ strcpy(Graduate::field,field); }//构造函数void Graduate::print(){ Student::print(); cout<<"field :"<
<<"\n"; }void Graduate::insert(){ ptr=new Graduate(name,age,address,tel,level,school,field);}void List::add(Person *node){ char key[20]; strcpy(key,node->name); Person *curr_node=root;//Person类是List类的友元,故可以直接访问 Person *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){ Person *curr_node=root; Person *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::show(){ Person *cur=root; while(cur!=0) { cur->print(); cur=cur->next; }}Person *Person::ptr=0; int main(int argc, char *argv[]){ List list; Student stu("田强强",25,"河北","188107485",3,"北航"); list.add(&stu); Graduate gra("田保兴",25,"北京","18810743",3,"北京航空航天大学","大数据"); list.add(&gra); list.show(); system("PAUSE"); return EXIT_SUCCESS;}

转载于:https://my.oschina.net/winHerson/blog/173488

你可能感兴趣的文章
新手网站建设优化,这些网站为你提供数之不尽的免费素材!(3)
查看>>
HTML特殊字符显示(常用到的特殊符号,箭头相关,数学相关,标点,符号相关等)...
查看>>
40岁的程序员找不到工作,原来码农真的是碗青春饭
查看>>
2018年前端性能优化总结,这也是我做程序员的第五个年头了
查看>>
前端进阶(三)从0到1学AJAX,这篇就够了!
查看>>
强大的CSS:实现平行四边形布局效果
查看>>
强大的CSS:var变量的局部作用域(继承)特性
查看>>
强大的CSS: 使用“变量种子计数器”扩展动画更多可能性
查看>>
强大的CSS:focus-visible伪类真的太6了!
查看>>
强大的CSS:3种姿势实现26个英文字母的案例
查看>>
强大的CSS:placeholder-shown伪类实现Material Design占位符交互效果
查看>>
强大的CSS:图形绘制合集,方便你我!
查看>>
强大的CSS:scroll-snap滚动事件停止及元素位置检测
查看>>
程序员30岁前,月薪达不到30K,该何去何从?
查看>>
只要记住这五点,学习任何新编程语言都不是问题
查看>>
常见的前端开发CSS 面试题及回答策略
查看>>
缺前端是假的,缺优秀前端是真的
查看>>
前端入门那么容易,工作很难找吗?
查看>>
Web前端很难学?html、css t、JavaScrip知识架构图分享
查看>>
常见的前端开发:Javascript 面试题及回答策略
查看>>