循环队列的基本操作(C++)

前两天因为一些事情耽误了博客,今天努力把鸽掉的补回来,加油加油

关于循环队列(先进先出)的知识点总结如下:
1.空队:front=rear;

2.入队:queue[rear]=A; rear=(rear+1)%Maxsize;

3.出队:e=queue[front]; front=(front+1)%Maxsize;

4.满队:(rear+1)%Maxsize=front;

关于c++的中输出cout的知识:

1.cout<<("Hello World!  \n")//换一行

cout<<("Hello World! \n\n")//换两行

cout<<("Hello World! ")<<endl//同样具有换行的作用

2.char myage=15
cout<<("I am")<<myAge<<("years old.")<<endl;

3.int myNum=5;

double myFloatNum=5.99;

char myLetter='D';

string myText="Hello";

bool myBoolean=true;

4.int x=1;

int y=2;

cout<<x+y<<endl;//输出3

———————————————————————————————————————————实现代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<cstdlib>
using namespace std;
#define Status int
#define QElemType int
#define MaxQSize 100

//循环队列的数据结构定义
typedef struct {
	QElemType data[MaxQSize];//数据域
	int front, rear;//队头指针,队尾指针
}SqQueue;//普通类型数组,数组引用Q.front,指针引用Q->front
//********************************************************基本操作函数*********************************************
//循环队列的初始化
Status InitQueue(SqQueue& Q) {
	Q.front = Q.rear = 0;
	return 1;
}

//循环队列的打印求长度
Status QueueLength(SqQueue Q) {
	return((Q.rear-Q.front+MaxQSize)%MaxQSize);//防止出现循环队列rear的值小于front出现负值的情况
}

//判断队列是否为空
bool QueueEmpty(SqQueue Q) {
	if (Q.front==Q.rear)	return true;
	else	return false;
}

//循环队列的入队
bool EnQueue(SqQueue& Q, QElemType e) {
	if ((Q.rear+1)%MaxQSize==Q.front)	return false;//注意此时队满的异常情况
	Q.data[Q.rear] = e;
	Q.rear = (Q.rear+1) % MaxQSize;
	return true;
}

//循环队列的出队
bool DeQueue(SqQueue& Q, QElemType& e) {
	if (QueueEmpty(Q))	return false;//利用QueueEmpty函数判断队空的异常情况
	e = Q.data[Q.front];
	Q.front = (Q.front + 1) % MaxQSize;
	return true;
}

//读取队头元素
bool GetHead(SqQueue& Q, QElemType e) {
	if (QueueEmpty(Q))	return false;
	e = Q.data[Q.front];
	return true;
}
//*******************************************************功能实现函数***********************************************
//入队功能函数
void EnterToQueue(SqQueue& Q) {
	int n; QElemType e; int flag;
	cout <<("请输入出队元素个数(>=1): ") << endl;
	cin >> n;
	for ( int i = 0;  i < n;  i++){
		cout << ("请输入第")<< i+1 <<("个元素的值") << endl;
		cin >> e;
		flag = EnQueue(Q, e);
		if (flag)	cout << e << ("已入队")  << endl;
		else {
			cout << ("队已满!") << endl;
			break;
		}	
	}
}

//出队功能函数
void DeletFromQueue(SqQueue &Q) {
	int n; QElemType e=0; int flag;
	cout << ("请输入出队元素个数(>=1): ") << endl;
	cin >> n;
	for (int i = 0; i < n; i++){
		flag = DeQueue(Q, e);
		if (flag)	cout << e << ("已出队") << endl;
		else{
			cout << ("队已空!") << endl;
			break;
		}
	}
}


//读取队头功能函数
void GetHeadOfQueue(SqQueue Q) {
	QElemType e=0; bool flag;
	flag = GetHead(Q, e);
	if (flag)	cout << ("队头元素为: ") << e << endl;
	else	cout << ("队已空!") << endl;
}

//菜单
void menu() {
	cout << ("1.入队               2.出队") << endl;
	cout << ("3.取队头元素         4.退出") << endl;
}

//主函数
int main() {
	SqQueue Q; int choice;
	InitQueue(Q);
	while (1){
		menu();
		cout << ("请输入菜单序号: ") << endl;
		cin >> choice;
		if (choice == 4)	break;
		switch (choice){
		    case 1:EnterToQueue(Q); break;
			case 2:DeletFromQueue(Q); break;
			case 3:GetHeadOfQueue(Q); break;
		default:cout << ("输入错误!") << endl;
		}
	}
	return 0;
}

——————————————————————————————————————————

实现效果:

 

  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值