循环队列的基本操作

操作介绍
1、入队一个元素
2、出队一个元素
3、输出当前队列
4、获取队首元素
5、求队列长度
6、判断队列是否为空
7、判断队列是否为满
8、退出操作系统

#include<windows.h>
#include<iostream>
using namespace std;
typedef struct
{
	int front = 0;
	int rear = 0;
}QPtr;
typedef int Queue[100];
//输出循环队列
void putQueue(Queue Q, QPtr q, int n)
{
	cout << "当前队列为:";
	if (q.front == q.rear)cout << "队列为空";
	while (q.front != q.rear)
	{
		cout << Q[q.front] << " ";
		q.front = (q.front + 1) % (n + 1);
	}
	cout << endl;
}
//入队一个元素
int  EnQueue(Queue Q, QPtr q, int n)
{
	if ((q.rear + 1) % (n + 1) == q.front)cout << "队满无法入队!";
	else
	{
		int x;
		cout << "请输入入队元素:";
		cin >> x;

		Q[q.rear] = x;
		q.rear = (q.rear + 1) % (n + 1);
	}
	return q.rear;
}
//出队一个元素
int DeQueue(Queue Q, QPtr q, int n)
{
	if (q.front == q.rear)cout << "队空无法完成出队操作";
	else
	{
		q.front = (q.front + 1) % (n + 1);
	}
	return q.front;
}
//获取队首元素
void GetfirstQueue(Queue Q, QPtr q)
{

	if (q.front == q.rear)cout << "队空无法完成出队操作";
	else
	{
		cout << "队首元素为:";
		cout << Q[q.front];
	}
	cout << endl;
}
//求队列长度
void GetlengthQueue(Queue Q, QPtr q, int n)
{
	int flag = 1, p;
	p = q.front;
	if (q.front == q.rear)flag = 0;
	else
	{
		while (p != q.rear - 1)
		{
			p = (p + 1) % n;
			flag++;
		}
	}
	cout << "当前队列长度为:" << flag << endl;
}
//判断队列是否为空
void judgeQueueempty(Queue Q, QPtr q)
{
	if (q.front == q.rear)cout << "队列为空" << endl;
	else cout << "队列不为空" << endl;
}
//判断队列是否为满
void judgeQueuefull(Queue Q, QPtr q, int n)
{
	if (q.rear % n == q.front)cout << "队列为满" << endl;
	else cout << "队列不为满" << endl;
}
int main()
{
	QPtr q;
	Queue Q;
	int n;
	cout << "请输入元素个数:";
	cin >> n;
	if (n == 0)cout << endl;
	else
	{
		cout << "请设置队列元素:";
		for (int i = 0; i < n; i++, q.rear++)
		{
			cin >> Q[q.rear];
		}
	}
	while (1)
	{
		Sleep(1000);
		cout << "*********操作介绍**********" << endl;
		cout << "      1、入队一个元素      " << endl;
		cout << "      2、出队一个元素      " << endl;
		cout << "      3、输出当前队列      " << endl;
		cout << "      4、获取队首元素      " << endl;
		cout << "      5、求队列长度        " << endl;
		cout << "      6、判断队列是否为空  " << endl;
		cout << "      7、判断队列是否为满  " << endl;
		cout << "      8、退出操作系统      " << endl;
		cout << "**************************" << endl;
		cout << "请输入操作代号:";
		int m;
		cin >> m;
		switch (m)
		{
		case 1:
			q.rear = EnQueue(Q, q, n);
			break;
		case 2:
			q.front = DeQueue(Q, q, n);
			break;
		case 3:
			putQueue(Q, q, n);
			break;
		case 4:
			GetfirstQueue(Q, q);
			break;
		case 5:
			GetlengthQueue(Q, q, n);
			break;
		case 6:
			judgeQueueempty(Q, q);
			break;
		case 7:
			judgeQueuefull(Q, q, n);
			break;
		}
		if (m == 8)break;
	}
    while(1);
	return 0;
}
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值