#ifndef SEQQUEUE_H
#define SEQQUEUE_H
#define QUEUE_INIT_SIZE 8
#define QUEUE_INC_SIZE 2
typedef int Qelemtype;
typedef struct
{
Qelemtype * data;
int front;
int rear;
int cursize;
int maxsize;
} SeqQueue;
void InitQueue ( SeqQueue & q) ;
void DestroyQueue ( SeqQueue & q) ;
void ClearQueue ( SeqQueue & q) ;
bool Inc_Queue ( SeqQueue & q) ;
bool QueueEmpty ( SeqQueue & q) ;
int QueueLength ( SeqQueue & q) ;
bool QueueFull ( SeqQueue & q) ;
bool GetFront ( SeqQueue & q, Qelemtype & e) ;
bool Getrear ( SeqQueue & q, Qelemtype & e) ;
bool EnQueue ( SeqQueue & q, Qelemtype x) ;
bool DeQueue ( SeqQueue & q, Qelemtype & e) ;
#endif
#include "seqqueue.h"
void InitQueue ( SeqQueue & q)
{
q. data = ( Qelemtype* ) malloc ( sizeof ( Qelemtype) * QUEUE_INIT_SIZE) ;
if ( q. data)
{
q. cursize = 0 ;
q. front = q. rear = 0 ;
q. maxsize = QUEUE_INIT_SIZE;
}
}
bool Inc_Queue ( SeqQueue & q)
{
Qelemtype * newdata = ( Qelemtype* ) malloc ( sizeof ( Qelemtype) * q. maxsize * QUEUE_INC_SIZE) ;
if ( NULL == newdata)
{
return false;
}
int i = 0 ;
Qelemtype x;
while ( DeQueue ( q, x) )
{
newdata[ i++ ] = x;
}
free ( q. data) ;
q. data = newdata;
q. cursize = q. maxsize;
q. front = 0 ;
q. rear = q. maxsize;
q. maxsize * = QUEUE_INC_SIZE;
return true;
}
void DestroyQueue ( SeqQueue & q)
{
free ( q. data) ;
q. data = NULL ;
}
void ClearQueue ( SeqQueue & q)
{
q. cursize = 0 ;
q. front = q. rear = 0 ;
}
bool QueueEmpty ( SeqQueue & q)
{
return q. cursize == 0 ;
}
int QueueLength ( SeqQueue & q)
{
return q. cursize;
}
bool QueueFull ( SeqQueue & q)
{
return QueueLength ( q) == q. maxsize;
}
bool GetFront ( SeqQueue & q, Qelemtype & e)
{
if ( QueueEmpty ( q) )
{
return false;
}
e = q. data[ q. front] ;
return true;
}
bool Getrear ( SeqQueue & q, Qelemtype & e)
{
if ( QueueEmpty ( q) )
{
return false;
}
e = q. data[ ( q. rear+ q. maxsize- 1 ) % q. maxsize] ;
return true;
}
bool EnQueue ( SeqQueue & q, Qelemtype x)
{
if ( QueueFull ( q) )
{
return false;
}
q. data[ q. rear] = x;
q. rear = ( q. rear + 1 ) % q. maxsize;
q. cursize + = 1 ;
return true;
}
bool DeQueue ( SeqQueue & q, Qelemtype & e)
{
if ( QueueEmpty ( q) )
{
return false;
}
e = q. data[ q. front] ;
q. front = ( q. front + 1 ) % q. maxsize;
q. cursize - = 1 ;
return true;
}