自己写的一个Queue功能的类模板:
/*my_queue.h*/
#include<iostream>
using namespace std;
template <class T> class QueueItem ;
template <class Type> class Queue ;
template <class T>
class QueueItem{
public:
T val ;
QueueItem *next ;
};
template <class Type>
class Queue{
public:
Queue() : front(0) , back(0) {}
~Queue() ;
Type remove() ;
void add(Type ) ;
bool is_empty() {return front == 0 ;}
void print() ;
private:
QueueItem<Type> *front ;
QueueItem<Type> *back ;
} ;
template <class Type>
Queue<Type>::~Queue(){
QueueItem<Type> *pstr ,*p;
pstr = front ;
p = pstr ;
while(pstr != back){
p = pstr ;
pstr = pstr->next ;
delete p ;
}
delete pstr ;
}
template <class Type>
inline void Queue<Type>::print(){
QueueItem<Type>* pstr ;
pstr = front ;
int i = 1 ;
while(pstr!=back && pstr){
cout<<"value "<<i<<" "<<pstr->val<<endl ;
pstr = pstr->next ; i ++ ;
}
if(pstr)
cout<<"value "<<i<<" "<<pstr->val<<endl ;
}
template <class Type>
inline void Queue<Type>::add(Type val){
QueueItem<Type>* pstr ;
pstr = new QueueItem<Type> ;
pstr->val = val ;
pstr->next = 0 ;
if(is_empty()){
front = back = pstr ;
}
else{
back->next = pstr ;
back = pstr ;
}
}
template <class Type>
inline Type Queue<Type>::remove(){
Type val ;
QueueItem<Type>* pstr;
if(!is_empty()){
if(front != back){
pstr = front ;
val = front->val ;
front = front->next ;
delete pstr ;
}
else{
val = front->val ;
front = back = 0 ;
delete pstr ;
}
return val ;
}
else{
cout<<"There is no elements in the queue."<<endl ;
}
}
main函数的实现:
#include<iostream>
#include"my_queue.h"
#include<string>
Queue<string> que ;
int main(){
string s ;
for(int i=1;i<=5;++i){
cin>>s ;
que.add(s) ;
}
que.print();
cout<<"----------After remove --------"<<endl ;
que.remove() ;
que.print() ;
system("pause");
return 0 ;
}