⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 yizhi_list.cpp

📁 不同的数据结构组成的链表
💻 CPP
字号:
#include<iostream.h>
#include<string.h>
#include<conio.h>

class person{
	friend class list;
protected:
	char name[20];
	int age;
	char add[40];
	char tele[15];
	static person *ptr;
	person *next;
public:
	person (char *,int,char *,char *);
	virtual void print();
	virtual void insert(){};
};




class student:public person{
	friend class list;
	int level;
	float grade_point_average;
public:
	student(char *,int,char *,char *,int,float);
	void print();
	void insert();
};




class teacher:public person{
	friend class list;
	float salary;
public:
	teacher(char *,int,char *,char *,float);
	void print();
	void insert();
};




class staff:public person{
	friend class list;
	float hourly_wages;
public:
	staff(char *,int,char *,char *,float);
	void print();
	void insert();
};




class list{
	person *root;
public:
	list(){root=0;}
	void insert_person(person *node);
	void remove(char *name);
	void print_list();
};



person::person(char *name,int age,char *add,char *tele)
{
	strcpy(person::name,name);
	strcpy(person::add,add);
	strcpy(person::tele,tele);
	person::age=age;
	next=0;
}



void person::print()
{
	cout<<"\nname:"<<name<<"\n";
	cout<<"age:  "<<add<<"\n";
	cout<<"address:"<<add<<"\n";
	cout<<"telephone number:"<<tele<<"\n";
}



student::student(char *name,int age,char *add,char *tele,int level,float grade_point_average):person(name,age,add,tele)
{
	student::level=level;
	student::grade_point_average=grade_point_average;
}



void student::print()
{
	person::print();
	cout<<"grade point average:  "<<grade_point_average;
	cout<<"level";
}



void student::insert()
{
	ptr=new student(name,age,add,tele,level,grade_point_average);
}



teacher::teacher(char *name,int age,char *add,char *tele,float salary):person(name,age,add,tele)
{
	teacher::salary=salary;
}


void teacher::print()
{
	person::print();
	cout<<"salary:  "<<salary<<"\n";
}




void teacher::insert()
{
	ptr=new teacher(name,age,add,tele,salary);
}



staff::staff(char *name,int age,char *add,char *tele,float hourly_wages):person(name,age,add,tele)
{
	staff::hourly_wages=hourly_wages;
}



void staff::print()
{
	person::print();
	cout<<"hourly_wages:"<<hourly_wages<<"\n";
}


void staff::insert()
{
	ptr=new staff(name,age,add,tele,hourly_wages);
}


void list::insert_person(person *node)
{
	char key[20];
	strcpy(key,node->name);
	person *curr_node=root;
	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::print_list()
{
	person *cur=root;
	while(cur!=0)
	{
		cur->print();
		cur=cur->next;
	}
}


person *person::ptr=0;


void main()
{
	list people;
	student stu("wangchong",20,"shanghai","02455524",3,54);
	teacher tea("lining",43,"beijing","01063716193",563);
	staff sta("chenling",42,"qintao","012-65109037",20);
	people.insert_person(&stu);
	people.insert_person(&tea);
	people.insert_person(&sta);
	people.print_list();
	cout<<endl<<"删除"<<endl;
	people.remove("chenling");
	people.remove("lining");
	people.remove("wangchong");
	people.print_list();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -