0
点赞
收藏
分享

微信扫一扫

数据结构:循环队列的实现代码,图文详解(c/c++版)

自信的姐姐 2022-03-19 阅读 23

一.头文件

定义队列与队列的长度

#include<iostream>
using namespace std;
#define OK 1
#define ERROR 0
#define MAXSIZE 10
typedef int status;
typedef struct
{
	int n;
}number;   //元素结构体
typedef struct sqqueue
{
	number* data;   //数据
	int front;   //队首
	int rear;     //队尾
}squsue;

二.实现函数

(1)初始化函数

先给队列分配空间,判断初始化是否成功。让队首与队尾都为0,返回状态OK

status initqueue(sqqueue& Q)
{
	Q.data = new number[MAXSIZE];
	if (!Q.data) return ERROR;
	Q.front = Q.rear = 0;
	return OK;
}

(2)入队函数

首先输入入队元素个数进入循环,在循环中if语句来判断队列是否已满,注意+1取模的操作,因为在循环队列中,有一位是空的,用于队列是否已满。如图所示:
在这里插入图片描述

status input(sqqueue& Q)
{
	int n;
	cout << "请输入元素个数:";
	cin >> n;
	cout << "请输入入队元素:";
	for (int i = 0; i < n; i++)
	{
		if ((Q.rear + 1) % MAXSIZE == Q.front)
			return ERROR;
		cin >> Q.data[Q.rear].n;
		Q.rear = (Q.rear + 1) % MAXSIZE;
	}
	return OK;
}

队尾加一时同样需要取模。

(3)出队函数

与入队操作类比,出队是在队首进行,所以出队操作第一步是判断队是否为空,如果不为空将当前队首元素输出,进行队首取模加一。

status output(sqqueue& Q)
{
	if (Q.rear == Q.front)
		return ERROR;
	cout << "元素" << Q.data[Q.front].n << "以出队" << endl;
	Q.front = (Q.front + 1) % MAXSIZE;
	return OK;
}

(4)输出队首函数

只输出元素,不对队首进行操作不用加&。

status head(sqqueue Q)
{
	if (Q.rear == Q.front) return ERROR;
	cout << "当前队首元素为:" << Q.data[Q.front].n << endl;
	return OK;
}

(5)判断队长函数

队长为队尾-队首+队的最大长度取模。

status length(sqqueue Q)
{
	int n = (Q.rear - Q.front + MAXSIZE) % MAXSIZE;
	cout << "当前队长:" << n << endl;
	return OK;
}

三.主函数

在主函数调用实现函数,进行验证。

int main()
{
	squsue Q;
	initqueue(Q);
	input(Q);
	head(Q);
	length(Q);
	output(Q);
	head(Q);
	length(Q);
	return 0;
}

这是最后的输出效果:
在这里插入图片描述
F_NCIAE_A231_2022/3/19

举报

相关推荐

0 条评论