#include <iostream>
using namespace std;
#define MAXSIZE 5 //定义数组长度,限制元素个数
//定义结构体
struct Queue
{
int a[MAXSIZE];
int front; //前指针,指向队首
int rear; //后指针,指向对尾
};
//初始化
void InitQuene(struct Queue* p)
{
p->front = p->rear = 0; //初始化前后指针都指向0
}
//求长度
int QueueLength(struct Queue* p)
{
return (p->rear - p->front + MAXSIZE) % MAXSIZE; //求元素个数
}
//判断是否为空
short IsEmpty(struct Queue* p)
{
if (p->front == p->rear) //若前后指针指向同一个节点,则判断为空
{
cout << "此时循环队列已队空,无数字输出" << endl;
return 1;
}
else
return 0;
}
//判断是否为满
short IsFull(struct Queue* p)
{
if (p->front == (p->rear + 1) % MAXSIZE) //若前指针等于(后指针+1)%数组大小,则判断为满
{
cout << "队满,此数不予进队" << endl;
return 1;
}
else
return 0;
}
//进队
short EnQueue(struct Queue* p,int key)
{
if (IsFull(p)) //若队列为满,则进队失败
return 0;
p->a[p->rear] = key; //否则将进队元素赋值给后指针所指的位置,后指针往后移动一格
p->rear = (p->rear + 1) % MAXSIZE;
return 1;
}
//出队
short DeQueue(struct Queue* p, int* value)
{
if (IsEmpty(p)) //若队列为空,则出队失败
{
return 0;
}
else
{
*value = p->a[p->front]; //传入一个指针保留出队元素,然后队首指向下一个元素
p->front = (p->front + 1) % MAXSIZE;
cout << "出队数:" << *value << endl;
return 1;
}
}
int main()
{
struct Queue c; //定义结构体
InitQuene(&c); //调用初始化函数,初始队列
int choice = 1;
while (choice)
{
cout<<"选项:1(入队) or 2(出队):"<<endl;
cin >> choice;
switch (choice)
{
case 1:
int n;
cout<<"请输入你要入队的数:"<<endl;
scanf_s("%d", &n);
EnQueue(&c, n);
cout << endl;
break;
case 2:
int value; //出队,输出
DeQueue(&c, &value);
//cout<<"---%d出队---还有%个在队列---\n", value, QueueLength(&c);
cout << endl;
break;
}
}
}
循环队列
最新推荐文章于 2024-06-17 00:00:00 发布