循环队列的增删改查
#include<stdio.h>
#include<stdlib.h>
/*
0.创建结构体SqQueue
*/
#define MaxSize 5
typedef int ElemType;
typedef struct {
ElemType data[MaxSize];//队列只能存储maxsize-1个元素
int front, rear;//队头,队尾指针
}SqQueue;
/*
1.初始化循环队列
void InitQueue(SqQueue &Q)
*/
void InitQueue(SqQueue &Q)
{
Q.rear = Q.front = 0;
}
/*
2.判断循环队列是否为空
bool isEmpty(SqQueue Q)
*/
bool isEmpty(SqQueue Q)
{
//这里不可以写成Q.rear==0&&Q.front==0因为队列为空的时候,也可以不是在值为0处为空
if (Q.rear == Q.front)
return true;
else
return false;
}
/*
3.入队操作
bool EnQueue(Squeue &Q,ElemType e)
{
先判断队列是否满
移动尾指针进行数据的入队操作
特别注意的是需要
}
*/
bool EnQueue(SqQueue &Q, ElemType e)
{
if ((Q.rear + 1) % MaxSize == Q.front)
return false;
Q.data[Q.rear] = e;
Q.rear = (Q.rear + 1) % MaxSize;//向后移动一格
return true;
}
/*
4.队列出队操作
bool DeQueue(SqQueue &Q, ElemType e)
{
先判断队列是否空
将数据存到e
同时进行出栈操作
}
*/
bool DeQueue(SqQueue &Q, ElemType &e)
{
if (Q.front==Q.rear)
{
return false;//先判断队列是否空
}
e = Q.data[Q.front];//将数据存到e
Q.front = (Q.front + 1) % MaxSize;//同时进行出栈操作
return true;
}
int main()
{
SqQueue Q;
bool ret;//存储返回值
ElemType e;//存储出队元素
//初始化队列
InitQueue(Q);
//判断队列是否为空
ret = isEmpty(Q);
if (ret)
printf("队列为空\n");
else
printf("队列不为空\n");
//入队操作
EnQueue(Q, 3);
EnQueue(Q, 4);
EnQueue(Q, 5);
ret = EnQueue(Q, 6);
ret = EnQueue(Q, 7);
if (ret)
{
printf("入队成功\n");
}
else
{
printf("入队失败\n");
}
//出栈操作
ret = DeQueue(Q, e);
if (ret)
{
printf("出队成功,元素值%d\n", e);
}
else
{
printf("出队失败\n");
}
return 0;
}