循环队列 c++ 模板实现
#include <iostream>
using namespace std;
template < class T >
class sqqueue {
private :
T * data;
int front;
int rear;
int maxsize;
public :
sqqueue ( int n) ;
~ sqqueue ( ) ;
bool enqueue ( T e) ;
bool dequeue ( T & e) ;
bool emptyqueue ( ) ;
bool fullqueue ( ) ;
void clear_queue ( ) ;
void print ( ) ;
} ;
template < class T >
sqqueue< T> :: sqqueue ( int n)
{
data = new T[ n] ;
this - > front = 0 ;
this - > rear = 0 ;
this - > maxsize = n;
}
template < class T >
sqqueue< T> :: ~ sqqueue ( )
{
delete [ ] data;
this - > data = NULL ;
}
template < class T >
bool sqqueue< T> :: enqueue ( T e)
{
if ( this - > fullqueue ( ) )
{
cout << "队已满,无法插入" << endl;
return false ;
}
else
{
data[ this - > rear] = e;
this - > rear = ( this - > rear + 1 ) % maxsize;
return true ;
}
}
template < class T >
bool sqqueue< T> :: dequeue ( T & e)
{
if ( this - > emptyqueue ( ) )
{
cout << "队空,无法出队" << endl;
return false ;
}
else
{
e = data[ this - > front] ;
this - > front = ( this - > front + 1 ) % maxsize;
return true ;
}
}
template < class T >
bool sqqueue< T> :: emptyqueue ( )
{
return this - > front == this - > rear;
}
template < class T >
bool sqqueue< T> :: fullqueue ( )
{
return ( ( this - > rear + 1 ) % maxsize == this - > front ? true : false ) ;
}
template < class T >
void sqqueue< T> :: clear_queue ( )
{
this - > front = 0 ;
this - > rear = 0 ;
}
template < class T >
void sqqueue< T> :: print ( )
{
T p = this - > front;
while ( ( p % maxsize) != this - > rear)
{
cout << this - > data[ p] << " " ;
p++ ;
}
cout << endl;
}
int main ( )
{
sqqueue< int > sq ( 8 ) ;
for ( int i = 0 ; i < 4 ; i++ )
{
sq. enqueue ( i + 1 ) ;
}
for ( int i = 0 ; i < 2 ; i++ )
{
sq. dequeue ( i) ;
}
sq. print ( ) ;
sq. clear_queue ( ) ;
cout << sq. emptyqueue ( ) << endl;
cout << sq. fullqueue ( ) << endl;
system ( "pause" ) ;
return 0 ;
}