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

📄 list.h

📁 基于链表模板的学生成绩管理系统
💻 H
字号:
# ifndef LIST_CLASS
# define LIST_CLASS

# define NULL 0

# include <iostream>
# include <fstream>

using namespace std;

template <class T>
class List;

template <class T>
class ListItem
{
	friend class List<T>;
	ListItem(T& v):value(v),next(NULL){}
	T value;
	ListItem* next;
public:
	ListItem* GetNext(){return next;}
	T GetValue(){return value;} 
	void SetValue(T & v){value=v;}
};

template <class T>
class List
{
public:
	List():front(NULL),rear(NULL){}
	void Insert(T& value);
	void Delete(T& value);
	void FindAndPrint(T& value);
	void Save(ofstream& of);
	void Read(ifstream& in);
	void Print();
	void Clear(){front=rear=NULL;}
	bool Empty(){return front==NULL;}
	ListItem<T>* GetFront(){return front;}
	ListItem<T>* GetRear(){return rear;}
private:
	ListItem<T>* front;
	ListItem<T>* rear;
};

template <class T>
void List<T>::Insert(T& value)
{
	ListItem<T>* p=new ListItem<T>(value);
	if(Empty())
		front=rear=p;
	else
	{
		rear->next=p;
		rear=p;
	}
}

template <class T>
void List<T>::Delete(T &value)
{
	ListItem<T>* p=front;
	ListItem<T>* pre=p;
	while(p->value!=value&&p!=NULL)
	{
		pre=p;
		p=p->next;
	}
	if(p==NULL)
	{
		cout<<"The Student does not exsit!"<<endl;
		return;
	}
	else
	{
		if(p==front)
			front=front->next;
		else if(p==rear)
		{
			rear=pre;
			rear->next=NULL;
		}
		else
			pre->next=p->next;
		delete p;
	}
}

template <class T>
void List<T>::FindAndPrint(T &value)
{
	ListItem<T>* p=front;
	while(p!=NULL)
	{
		if(p->value==value)
		{
			cout<<p->value;
			break;
		}
		p=p->next;
	}
	if(p==NULL)
	{
		cout<<"The Student does not exsit!"<<endl;
		return;
	}
}

template <class T>
void List<T>::Save(std::ofstream &of)
{
	ListItem<T>* p=front;
	while(p!=NULL)
	{
		of<<p->value;
		p=p->next;
	}
}

template <class T>
void List<T>::Read(std::ifstream &in)
{
	Student s;
	while(in>>s)
	{
		Insert(s);
	}
}

template <class T>
void List<T>::Print()
{
	if(Empty())
	{
		cout<<"There is no student's infomations:"<<endl;
	}
	ListItem<T>* p=front;
	while(p!=NULL)
	{
		cout<<p->value;
		p=p->next;
	}
}

# endif

⌨️ 快捷键说明

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