需要用到的知识:数据结构--链表 面对对象--类,模板,友元,构造函数和析构函数
#include <iostream>
using namespace std;
enum booler{Flase,True};
template <class T>
class Tnode{
public:
friend class Dlist;
Tnode(T t);
~Tnode();
void Setvalue(T t);
T Getvalue();
private:
T t;
Tnode<T>* last;
Tnode<T>* next;
};
template <class T>
Tnode<T>::Tnode(T t){
last = this;
next = this;
this->t=t;
}//构造函数
template <class T>
Tnode<T>::~Tnode(){
}//析构函数
template <class T>
void Tnode<T>::Setvalue(T t){
this->t=t;
}
template <class T>
T Tnode<T>::Getvalue(){
return t;
}
template <class T>
class Slist{
public:
Slist();
~Slist();
void AppendNode(Tnode<T> *p);
void DeleteNode(Tnode<T> *p);
void print();
private:
Tnode<T> *head;
Tnode<T> *current;
};
template <class T>
Slist<T>::Slist(){
head=NULL;
current=NULL;
}
template <class T>
Slist<T>::~Slist(){
Tnode<T> *p;
current = head;
if(current==NULL){
return;
}
do{
p=current;
current=current->next;
delete p;
}while(current!=head);
}
template <class T>
void Slist<T>::AppendNode(Tnode<T> *p){
Tnode<T> *pp=new Tnode<T>(*p);
if(head==NULL){
head=pp;
current=pp;
}else{
pp->last=current;
current->next=pp;
pp->next=NULL;
current=pp;
}
}
template <class T>
void Slist<T>::DeleteNode(Tnode<T> *p){
if(p==head){
current=head;
while(current->next!=NULL){
Tnode<T> *pp;
pp=current->next;
current=current->next;
delete pp;
}
head=NULL;current=NULL;
}else{
if(p->next=NULL){
delete p;
return;
}
Tnode<T> *ps;
ps=head;
while(ps->next!=p){
ps=ps->next
}
ps->next=p->next;
p->next->last=ps;
delete p;
}
}
template <class T>
void Slist<T>::print(){
current = head;
if(current == NULL){
return;
}
do{
cout<<current->Getvalue<<endl;
current=current->next;
}while(current!=NULL);
}