[循环队列]使用原因与注意事项
(2014-09-27 11:10:43)
标签:
循环队列假溢出优缺点使用 |
分类: DataStructure |
#define QueueSize 100 //应根据具体情况定义该值
typedef char DataType; //DataType的类型依赖于具体的应用
typedef struct{
int
front; //头指针,队非空时指向队头元素
int
rear; //尾指针,队非空时指向队尾元素的下一位置
int
count;//计数器,记录队中元素总数
DataType data[QueueSize];
}CirQueue;
1. 队列置空:
void InitQueue(CirQueue *Q)
{
Q->front=Q->rear=0;
Q->count=0; //计数器置0
}
2. 队列判空:
int QueueEmpty(CirQueue *Q)
{
return Q->count==0; //队列无元素为空
}
3. 判断队列是否满:
int QueueFull(CirQueue *Q)
{
return Q->count==QueueSize; //队中元素个数等于QueueSize时队满
}
4. 元素队列尾部入队:
void EnQueue(CirQueue *Q,DataType x)
{
if(QueueFull(Q))
Error("Queue overflow"); //队满上溢
Q->count ++; //队列元素个数加1
Q->data[Q->rear]=x; //新元素插入队尾
Q->rear=(Q->rear+1)%QueueSize; //循环意义下将尾指针加1
}
5. 元素从队列头部出队列:
DataType DeQueue(CirQueue *Q)
{
DataType temp;
if(QueueEmpty(Q))
Error("Queue underflow"); //队空下溢
temp=Q->data[Q->front];
Q->count--; //队列元素个数减1
Q->front=(Q->front+1)%QueueSize; //循环意义下的头指针加1
return temp;
}