#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;
}