c/c++循环队列(对小白友好)

发布时间:2024年01月24日

??1.队列的特点:先进先出(First In First Out)
??2.本篇中讲解循环队列会牺牲一个存储单元(这么做的目的是为了方便判断队满和队空)

在这里插入图片描述

1.循环队列的定义

#define MaxSize 50
typedef struct {
	int data[MaxSize];
	int front, rear;  //队头指针和队尾指针
}SqQueue;

2.初始化

void InitQueue(SqQueue &Q)
{
	Q.front = Q.rear = 0;  //初始化对头,队尾指针
}

3.判断空

bool isEmpty(SqQueue Q)
{
	if (Q.rear == Q.front)
		return true;
	return false;
}

4.入队

??入队后,队尾指针的变换 (Q.rear + 1) % MaxSize

bool EnQueue(SqQueue& Q, int e)
{
	//判断队满的条件
	if ((Q.rear + 1) % MaxSize == Q.front)
		return false;
	Q.data[Q.rear] = e;
	//循环队列
	Q.rear = (Q.rear + 1) % MaxSize;
	return true;
}

5.出队

??出队以后的对头指针变换 (Q.front + 1) % MaxSize

bool DeQueue(SqQueue& Q,int &e)
{
	if (Q.front == Q.rear)
		return false; //队空
	e = Q.data[Q.front];
	Q.front = (Q.front + 1) % MaxSize;
	return true;
}

6.获取队头元素

bool GetHead(SqQueue Q, int& e)
{
	if (Q.front == Q.rear)
		return false; //队空
	e = Q.data[Q.front];
	return true;
}

7.得到队列中有几个元素

int GetLength(SqQueue Q)
{
	int len = (Q.rear - Q.front + MaxSize) % MaxSize;
	return len;
}

8.打印全部元素

void PrintQueue(SqQueue Q)
{
	for (int i = Q.front; i < Q.rear; ++i)
	{
		cout << Q.data[i]<<" ";
	}
}

9.源代码

#include<iostream>
using namespace std;
#define MaxSize 50
typedef struct {
	int data[MaxSize];
	int front, rear;  //队头指针和队尾指针
}SqQueue;

//初始化
void InitQueue(SqQueue &Q)
{
	Q.front = Q.rear = 0;  //初始化对头,队尾指针
}

//判断空
bool isEmpty(SqQueue Q)
{
	if (Q.rear == Q.front)
		return true;
	return false;
}

//入队
bool EnQueue(SqQueue& Q, int e)
{
	//判断队满的条件
	if ((Q.rear + 1) % MaxSize == Q.front)
		return false;
	Q.data[Q.rear] = e;
	//循环队列
	Q.rear = (Q.rear + 1) % MaxSize;
	return true;
}

//出队
bool DeQueue(SqQueue& Q,int &e)
{
	if (Q.front == Q.rear)
		return false; //队空
	e = Q.data[Q.front];
	Q.front = (Q.front + 1) % MaxSize;
	return true;
}

//获取队头元素
bool GetHead(SqQueue Q, int& e)
{
	if (Q.front == Q.rear)
		return false; //队空
	e = Q.data[Q.front];
	return true;
}

int GetLength(SqQueue Q)
{
	int len = (Q.rear - Q.front + MaxSize) % MaxSize;
	return len;
}
//打印全部元素
void PrintQueue(SqQueue Q)
{
	for (int i = Q.front; i < Q.rear; ++i)
	{
		cout << Q.data[i]<<" ";
	}
}

int main()
{
	SqQueue Q;

	//初始化
	InitQueue(Q);

	//判断空
	isEmpty(Q);

	//入队
	int e = 0;
	cout << "输入入队的元素:";
	cin >> e;
	while (e != 9999)
	{
		EnQueue(Q, e);
		cout << "输入入队的元素:";
		cin >> e;
	}

	//出队
	DeQueue(Q,e);
	cout << "出队元素为:" << e << endl;

	//获取队头元素
	GetHead(Q, e);
	cout << "队头元素为:" << e << endl;

	//队列长度
	int len = GetLength(Q);
	cout << "元素个数为:" << len << endl;

	//打印全部元素
	PrintQueue(Q);

	return 0;
}

在这里插入图片描述

有帮助的话,点一个关注哟!

文章来源:https://blog.csdn.net/m0_63112274/article/details/135789321
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。