📄 list.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 + -