循环队列的C++实现

C++实现循环队列(数组模拟)【保姆级讲解】 看起来还不错,但仔细观察出队到队空时,队列里面没有数了,也就是队空了,可以继续加数据,但是,表示队列头尾的变量已经到了数组的最右边的下一个索引,已经没办法再往右了,同时数组还是空的。这里可以将数组的一个格子空出来,当数组还有一个格子的时候,就当作队列已经满了。出队的话,可以利用和入队类似的办法,但数组无法删除元素,但我们可以用一个数组索引的变量表示队头的位置,每次出队只需把这个索引向递增即可。这样看起来可以,但是有一个问题,我们需要时刻记得我们入队了几次,否则就无法根据索引入队了。没有到达数组末尾的时候, 阅读详情

同栈一样,队列也是操作受限的线性表

两种存储结构:顺序存储结构和链式存储结构

查看源图像

 循环队列

用一个数组存储队列,按照“先进先出”的原则,一般设计成如右图的循环队列,注意"假溢出"的问题:rear始终加1,不能再入队了,但实际上出队前面还有空位置;变成循环队列之后,究竟如何判断队列为满?:队列大小为m时,有m-1个元素就认为是队满。

#pragma once
#include<iostream>
using namespace std;

const int MAXSIZE = 10;
const int ERROR = 0;
const int OK = 1;
typedef int ElemType;

class Myqueue
{
public:
	Myqueue();
	int Queue_Length();
	bool Queue_Push(ElemType record);//入队
	bool Queue_Pop();                //出队
	ElemType GetHead();              //获得队头元素
	~Myqueue();
private:
	ElemType* base;
	int front;
	int rear;
};

Myqueue::Myqueue()
{
	this->base = new ElemType[MAXSIZE];
	this->front = 0;
	this->rear = 0;
}

int Myqueue::Queue_Length()//因为是循环队列
{
	return (rear - front + MAXSIZE) % MAXSIZE;//循环的原因不要返回rear-front
}

bool Myqueue::Queue_Push(ElemType record)
{
	if ((this->rear + 1) % MAXSIZE == this->front)//作为循坏队列的队满的条件
		return false;
	base[this->rear] = record;
	this->rear = (this->rear + 1) % MAXSIZE;//不再rear++,而是采用循环的rear = (rear + 1) % MAXSIZE
	return true;
}

bool Myqueue::Queue_Pop()
{
	if (this->front == this->rear)
		return false;
	this->front = (this->front + 1 ) % MAXSIZE;
}

ElemType Myqueue::GetHead()
{
	if (this->front == this->rear)
		return false;
	return base[this->front];
}

Myqueue::~Myqueue()
{
	if (base)
	{
		delete[] this->base;
		this->base = NULL;
	}
	this->front = 0;
	this->rear = 0;
}

查看源图像

 队列的链式存储

只有链式存储结构的表示,没有入队、出队等基本操作

class Node
{
	ElemType data;
	Node* next;
};
class LinkQueue
{
	Node* front;//队头指针
	Node* rear;//队尾指针
};
//入队不需要判断队满,出队需要判断队列是否为空,注意在链队出队操作时,
// 入队时,采用尾插法
//队列中的最后一个元素被删除时,队尾指针也丢失了,需要对队尾指针进行重新赋值(指向头节点)
循环队列的链式实现(C语言) 任务要求: 1.创建循环队列 2.链式实现 3.设置一个标志域tag,用它来判断front和rear相等时的队列情况。默认tag=0表示队列“空” 3.写出队列初始化,入队,出队函数 #include <iostream> #include <stdlib.h> #include <stdio.h> using namespace std; typedef int ElemType; typedef struct LinkNode { ElemType data 阅读详情

相关推荐

循环队列的C++实现以及假溢出的解决方法

在上篇《队列的C++实现》中已经介绍了一种假溢出的解决方案:当数据出队时,将数据整体向前移动,这样就会不会出现假溢出。 另一种方案是:将数组看成循环的,这样的话,即使尾端数据已经塞满,但是由于结构是循环的,可以继续将队头的空位当作队头插入数据,从而解决假溢出。 如何判断队列是空还是满?有俩种方法:1.设置标志位,当插入数据之后遇到top==end,标志队列是满,flag=1;如果删除数据遇到t

5111

带你一步步用C++实现循环队列

C++实现循环队列前言1.什么时候循环队列为空2.Push()操作(1)何时队列满了?(2)当队列满了,怎样扩大队列?(3)std::copy()的用法3.队列中现有多少个元素怎么算4.其他成员函数5.实例代码及运行结果:思考:总结 前言 有关队列的介绍,如队列的常用操作,循环队列和链式队列的优缺点对比等,可参考队列简介及常用操作 创建一个Queue类,确定成员函数和数据成员 template <typename T> class Queue { Queue(int _capacity = 1

weixin_43744293的博客 4014

产品经理如何运用AI提升工作效率

AI技术的应用为产品经理的工作流程带来了显著的效率提升。从需求收集到产品上线,AI可以在多个阶段提供智能化支持,帮助产品经理更好地理解用户需求、优化产品设计、提高开发和测试效率。在未来,随着AI技术的不断发展,产品经理将能够更加高效地管理产品生命周期,为用户提供更优质的产品体验。应用 | AI + 千行百业欢迎关注我的后续博文,我将分享更多关于人工智能、自然语言处理和计算机视觉的精彩内容。

不想宅的冷同学 1337

循环队列的顺序表示和实现

在开始之前我们做如下约定: 队空: front == rear 队满: (Q.rear + 1) % MaxSize == Q.front 求循环队列的长度: (Q.rear - Q.front + MaxSize) %  MaxSize 入队:Q.rear = (Q.rear + 1) % MaxSize 出队: Q.front = (Q.front + 1) % MaxSize  ...

成龙大侠的博客 588

EV1527、PT2262傻傻分不清?一文讲透常见315/433MHz遥控编码协议区别与选型

本文深度对比了EV1527、PT2262和SC5262三种常见的315/433MHz遥控编码协议,详细解析了它们的技术特点、成本效益和适用场景。EV1527作为低成本方案的首选,特别适合智能家居和简易安防设备;PT2262在稳定性和兼容性上表现优异;而SC5262则在安全性方面具有显著优势。文章还提供了实用的选型框架和工程建议,帮助开发者在不同应用场景中做出最优决策。

weixin_33640562的博客 349

【NAS for PVE _04】安装TrueNAS

前篇说到如何调试 Proxmox VE 8.2 为安装虚拟机做准备,本篇主要讲述如何在 Proxmox VE 上安装 TrueNAS 系统,并开启NFS供其他系统挂载使用官网下载好TrueNAS系统镜像。

村口王师傅。 6144

简单队列和循环队列的实现--数组实现

1.源代码如下 # include # define MAX_SIZE 10 int queue[MAX_SIZE]; int rear = -1; int front = -1; int InQueue(int value) {  if(rear >= MAX_SIZE)   return 0;  rear++;  queue[rear] = value;  retur

724

从零到英雄:如何用FPGA和AD9288打造你的第一台便携式示波器

本文详细介绍了如何利用FPGA和AD9288 ADC芯片从零开始打造一台高性能便携式示波器。通过硬件架构设计、高速数据采集系统实现及信号处理与显示系统的开发,读者可以掌握400Msps采样率的实现方法,并了解关键器件选型与系统优化技巧。

jjj34的博客 278

C/C++ 循环队列实现(完整代码)

循环队列比单链表实现队列会稍微要难理解一点,但是弄懂了其中的原理,就不会感觉到困难啦~~~ 循环队列的结构体:用count来记录元素的个数容易判断队列是否是空或者满。 typedef struct queue{ int count; //记录元素个数 int front; //队首 int rear; //队尾 int data[MAX_S...

SanpTap的博客 2万+

NT35310 - LCD显示屏

NT35310 是一个低功耗、26 万色、单芯片的 TFT-LCD 控制器/驱动器,分辨率 480*320,它有一个 345600 字节的显示 RAM 和一整套控制功能。NT35310 支持数字接口(MDDI),MIPI 接口,RGB 接口,8 / 9 / 16 / 18 位8080 接口。可以实现指定的窗口区域可以有选择地更新,以便可以显示运动图像。同时也可以独立显示静止的图像区域。...

m0_62444125的博客 3323

RK3568平台(camera篇)点亮imx586摄像头

mipi摄像头硬件确认点:1.供电:5V,2.8V,1.2V,1.8V,reset脚(硬拉3.3,上电的时候从低到高),pwron脚外接3.3V。2,时钟:MCLKOUT是24兆时钟。3.4组差分mipi线。mipi的data线的波形为方波。

weixin_49303682的博客 7258

C++实现循环队列

今天实现循环队列遇到了一个问题,数组里面有一个位置始终空着,不知道咋把整个数组完全用上... 一下是我的代码: #include <iostream> #include <malloc.h> #include <cstdlib> #define MAX_SIZE 5 using namespace std; typedef int ElmeType; typ...

a792686200的博客 669

uniapp 全局弹窗

功能详解1.有的组件需要全局调用,不想要在一个页面里面一个个引入,现在就需要写入到全局中,直接全局触发。2.通过 $rechargePop就能全局触发 充值的弹窗实现步骤一、先把组件封装好,如 rechargePop组件位置 components/RechargePop/index.vue ,就定义一个methods open方法就可以 二、在同级别路径下定义一个 index.js 三、引入到main.js 四、全局调用this.$rechargePop(); 就能弹出那个弹窗

weixin_42066070的博客 657

C++类模板实现循环队列

以下是本人用C++类模板实现的一种数据结构——循环队列。希望对人们有所帮助,也希望人们提出宝贵的意见! //循环队列 #ifndef _QUEUE_H_INCLUDED #define _QUEUE_H_INCLUDED template class _queue {     public:         _queue(size_t _capacity = 1):

ljianhui的专栏 4149

lvgl 9虚拟键盘控件 (lv_keyboard) 使用指南

是 LittlevGL 提供的一个虚拟键盘控件,适用于在图形界面中输入文本。与按钮矩阵类似,虚拟键盘预定义了多个键位布局,支持多种模式和自定义键位映射,能够满足各种文本输入需求。通过与文本区域 (Text Area) 的结合,键盘能够自动将输入的字符传送到指定区域。控件是 LittlevGL 提供的强大虚拟键盘解决方案,适用于任何需要文本输入的界面。通过预定义的键盘模式、自定义键位映射和文本区域自动填充功能,可以大大提升用户输入体验。无论是在嵌入式系统的用户界面中,还是在其他需要虚拟键盘的应用中,

m0_62599305的博客 2185

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

使用c++模板实现循环队列

使用c++模板实现循环队列

mshylf的博客 1099

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

循环队列的C++实现与解析(数组实现)

maxsize:定义队列的最大容量为10elemtype:元素类型定义,这里为int类型sq_queue:队列结构体,包含::存储队列元素的数组front:队头指针,指向队头元素rear:队尾指针,指向队尾元素的下一个位置循环队列是一种高效的队列实现方式,特别适合于已知最大容量且需要频繁进行入队和出队操作的场景。虽然存在一定的空间浪费和容量固定的限制,但在很多实际应用中,这些限制是可以接受的。

m0_75082047的博客 676

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

C++实现循环队列&链队列(详解循环队列队头指空)

C++实现循环队列(详解队头指空) 循环队列.hpp #include <iostream> using namespace std; const int MAXSIZE = 1024; template <class T> class CircleQueue { public: CircleQueue() { front = rear = 0; }; void EnQueue(T data); T DeQueue(); T GetFront() { if (rear

qq_36028321的博客 462

C++实现顺序循环队列和链式队列

C++实现顺序循环队列和链式队列 语言这个东西不用真的会忘, 我记得前前后后C++的基本语法我也看了好几遍了,一直没有动手写过什么东西,所以一遍遍的看,一遍遍的忘… … 正好最近在看数据结构,想着自己用C++来实现一下,一方面是熟悉整个逻辑过程,加深对数据结构的理解,另一方面,也熟悉一下C++。 顺序存储循环队列 栈是“先进后出”(FIFO)的结构,与之相反,队列是“先进先出”(FIFO)结构,就比如我们在一个窗口排队打饭,那么先排队的人一定先打好饭(当然,要排除插队的情况)。 如上图所示,如果还有

weixin_42133358的博客 720

数据结构循环队列C++实现

1.队列的概念 队列只允许在表的一端插入,另一端删除。允许插入的一端叫做队尾,允许删除的一端叫做对首。队列的特性叫“先进先出”。和栈一样,队列的存储形式也有两种,基于数组的存储表示和基于链表的存储表示。本文先实现基于数组的存储队列,也叫顺序队列。在顺序队列中设置两个指针,front和rear,front指示队头的位置,rear指示队尾的位置(说是指针,实际仍不是c语言的指针*,而是类似下标或索引的作用)。如下图所示: 当队列为空时,front=rear=0; 有新元素入队时,先将新元素添加到rea

Brillian123的博客 3132

循环队列 c++ 模板实现

循环队列 c++ 模板实现 #include<iostream> using namespace std; template<class T> class sqqueue { private: T *data; int front;// 头指针 int rear;// 尾指针 int maxsize; public: sqqueue(int n); /...

卖核弹的小男孩 的博客 293
上一篇: 栈数据结构的C++表示
下一篇: 串的数据结构及模式匹配算法(C++)
Worthwhile_HUST
博客等级 码龄5年 53粉丝 39原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值