SqQueue.h
//
//用顺序存储结构表示的循环队列
/
#ifndef _SQQUEUE_H_
#define _SQQUEUE_H_
#define MAXQSIZE 100//最大队列长度
typedef int QElemType;
typedef struct
{
QElemType *base;//初始化的动态分配存储空间
int front;//头指针,若队列不空,指向队列头元素
int rear;//尾指针,若队列不空,指向队列尾元素的下一个位置
}SqQueue;
bool InitQueue(SqQueue *Q);//初始化一个队列
bool DestroyQueue(SqQueue *Q);//销毁一个队列
bool ClearQueue(SqQueue *Q);//清空一个队列
bool QueueEmpty(SqQueue Q);//判断队列是否为空
unsigned int QueueLength(SqQueue Q);//返回队列的长度
bool GetHead(SqQueue Q, QElemType *e);//获取队列头元素
bool EnQueue(SqQueue *Q, QElemType e);//在队列中插入元素
bool DeQueue(SqQueue *Q, QElemType *e);//在队列中删除元素
#endif
SqQueue.cpp
#include
#include
#include "SqQueue.h"
//构造一个新队列
bool InitQueue(SqQueue *Q)
{
Q->base = (QElemType *)malloc(MAXQSIZE * sizeof(QElemType));
if(NULL == Q->base)
{
printf("error malloc!");
return false;
}
Q->front = Q->rear = 0;
return true;
}
//销毁一个队列
bool DestroyQueue(SqQueue *Q)
{
if(NULL == Q->base)
{
printf("Invalid queue!");
return false;
}
free(Q->base);
Q->base = NULL;
Q->front = Q->rear = 0;
return true;
}
//清空一个队列
bool ClearQueue(SqQueue *Q)
{
if(NULL == Q->base)
{
printf("Invalid queue!");
return false;
}
Q->front = Q->rear = 0;
return true;
}
//判断队列是否为空
bool QueueEmpty(SqQueue Q)
{
if(NULL == Q.base)
{
printf("Invalid queue!");
return false;
}
return (Q.front == Q.rear ? true : false);
}
//返回队列中元素的个数
unsigned int QueueLength(SqQueue Q)
{
if(NULL == Q.base)
{
printf("Invalid queue!");
return 0;
}
return (Q.rear - Q.front + MAXQSIZE) % MAXQSIZE;
}
//获取队列头元素
bool GetHead(SqQueue Q, QElemType *e)
{
if(NULL == Q.base)
{
printf("Invalid queue!");
return false;
}
*e = Q.base[Q.front];
return true;
}
//在队列中插入元素
bool EnQueue(SqQueue *Q, QElemType e)
{
if(NULL == Q->base)
{
printf("Invalid queue!");
return false;
}
if((Q->rear + 1) % MAXQSIZE == Q->front)
{
printf("Full queue!");
return false;
}
Q->base[Q->rear++] = e;
if(Q->rear == MAXQSIZE)
Q->rear = 0;
//也可以写成下式
/*Q->base[Q->rear] = e;
Q->rear = (Q->rear + 1) % MAXQSIZE;*/
return true;
}
//在队列中删除元素
bool DeQueue(SqQueue *Q, QElemType *e)
{
if(QueueEmpty(*Q))
return false;
*e = Q->base[Q->front++];
if(Q->front == MAXQSIZE)
Q->front = 0;
//也可以写成下式
/**e = Q->base[Q->front];
Q->front = (Q->front + 1) % MAXQSIZE;*/
return true;
}