循环队列和链表队列

循环队列:

#include <iostream>
using namespace std;
const int MAX_SIZE = 100;
template <class DataType>
/*
循环队列可以想象成一个环形,里面有一个个的格子,也就是环形数组
front表示首个(但是这不会一直是0),rear表示尾部
需要的函数是:
构造函数:设置private里面的数据(数组【首指针】,front,rear【下标】,mSize数组的大小析构函数:释放内存,删除data
把元素放进去的函数
放出来的函数【这两个函数需要判断是否为空,或者是否为满的函数】
清空的函数
显示的函数
显示现在队列里面的现有元素的个数
*/
class CirQueue
{
private:DataType *data;        //指向队列存储空间int front;                    //队首下标int rear;                     //队尾下标int mSize;                    // 存放队列的数组的大小
public:CirQueue();                   //建立缺省长度的队列CirQueue(int s);              //建立长度为size的队列~CirQueue();                  //清空队列,释放内存bool enQueue(DataType& item);  //入队bool deQueue();      //出队DataType getFront();     //读取队头元素,但不删除bool isEmpty();               //判断队列是否为空bool isFull();                //判断队列是否为满void clearQueue();            //清空队列void displayQueue();          //显示队列内容int queueLength();            //获取队列元素个数
};
template <class DataType>
CirQueue<DataType>::CirQueue()
{front=0;rear=0;mSize=MAX_SIZE;data= new DataType[mSize];
}
template <class DataType>
CirQueue<DataType>::CirQueue(int s)
{front=0;rear=0;mSize=s+1;data= new DataType[mSize];
}
template <class DataType>
CirQueue<DataType>::~CirQueue()
{delete[] data;
}
template <class DataType>bool CirQueue<DataType>::enQueue(DataType& item)
{if(CirQueue::isFull()){return false;}data[rear]=item;//从尾部加数据,就是data【front】是有数据的,data[rear]是没有数据的rear=(rear+1)%mSize;return true;}
template <class DataType>bool CirQueue<DataType>::deQueue(){if(CirQueue::isEmpty()){return false;}front=(front+1)%mSize;//把元素放出来的就是front向前移(%msize是因为环形)return true;}template <class DataType>bool CirQueue<DataType>::isEmpty(){return front==rear;//空的情况下front==rear}template <class DataType>bool CirQueue<DataType>::isFull(){return (rear+1)%mSize==front;//满了的话,rear+1=front,rear处没有数据,但是没有大碍}template <class DataType>DataType CirQueue<DataType>::getFront(){DataType x;x=data[front];return x;}template <class DataType>void CirQueue<DataType>::clearQueue(){front=rear;}template <class DataType>         //清空队列
void CirQueue<DataType>::displayQueue()
{if(CirQueue<DataType>::isEmpty()){cout<<"队列为空"<<endl;}else{for(int i=front;i!=rear;i=(i+1)%mSize){cout<<data[i]<<" ";}cout<<endl;}}
template <class DataType>       //显示队列内容
int CirQueue<DataType>::queueLength()
{int len=(rear-front+mSize)%mSize;return len;
}int main()
{int number;CirQueue<int> lq(20);cout << "将1-10加入队列" << endl;for(int i=1; i<=10; i++){if(!lq.enQueue(i))cout<<"队列已满,无法入队\n";}lq.displayQueue();//打印队列cout<<"弹出6个元素"<< endl;for(int i=0; i<6; i++){if(!lq.deQueue())cout<<"队列为空,无法出列。\n";}lq.displayQueue();//打印队列cout << "将11-21加入队列" << endl;for(int i=11; i<=21; i++){if(!lq.enQueue(i))cout<<"队列已满,无法入队\n";}lq.displayQueue();cout << "将22-28加入队列" << endl;for(int i=22; i<=28; i++){if(!lq.enQueue(i))cout<<"队列已满,无法入队\n";}lq.displayQueue();cout<<"队首元素是:"<<lq.getFront()<<endl;cout<<"弹出20个元素"<< endl;for(int i=0; i<20; i++){lq.deQueue();}lq.displayQueue();return 0;
}

链表队列:

实际上就是简单的链表加上class类别的表示形式

 /*链式队列*/
#include<stdlib.h>
#include<iostream>
using namespace std;
template<class DataType>
/**链队的结点*/
struct Node
{DataType data;struct Node *next;
};
template <class DataType>
class LinkQueue
{
private:Node<DataType> *front, *rear;       //队列的头和尾int length;         //队列元素个数
public:LinkQueue();                                //建立头结点,初始化属性~LinkQueue();                              //释放队列空间void enQueue(DataType x);        //入队bool deQueue();//出队DataType getFront( );//获取队头元素bool isEmpty();                            //判断队列是否为空void clearQueue();                       //清空队列void displayQueue();                   //显示队列内容int queueLength();                      //获取队列元素个数
};
template <class DataType>
LinkQueue<DataType>::LinkQueue()
{front=rear=NULL;length=0;
}
template <class DataType>LinkQueue<DataType>::~LinkQueue(){}template <class DataType>                             //释放void LinkQueue<DataType>::enQueue(DataType x){/*使用链表的话如果要加元素的话首先创立一个新的结构体,然后再去赋值,再去改变next指针*/Node<DataType> *newnode= new Node<DataType>;newnode->data=x;newnode->next=NULL;if(front==NULL)//这里不是rear=NULL{front=newnode;rear=newnode;/*如果front和rear指在一起时,也就是链表为空的情况,这种情况要分开讨论。*/}else{rear->next=newnode;rear=newnode;}}template <class DataType>bool LinkQueue<DataType>::deQueue(){if(LinkQueue<DataType>::isEmpty()){return false;}else{Node<DataType> *temp=front;front=front->next;//除去元素:将front指针向后移delete temp;length--;return true;}}template <class DataType>DataType LinkQueue<DataType>::getFront( ){return front->data;}template <class DataType>bool LinkQueue<DataType>::isEmpty(){return front==NULL;}template <class DataType>                //判断队列是否为空void LinkQueue<DataType>::clearQueue(){front=NULL;}template <class DataType>                  //清空队列void LinkQueue<DataType>::displayQueue(){if(LinkQueue<DataType>::isEmpty()){cout<<"[0] 队列为空。"<<endl;;}else{int len=LinkQueue<DataType>::queueLength();cout<<"["<<len<<"] ";Node<DataType> *temp=front;while(temp!=NULL){cout<<temp->data<<" ";temp=temp->next;}cout<<endl;}}template <class DataType>int LinkQueue<DataType>::queueLength(){if(LinkQueue<DataType>::isEmpty()){return 0;}else{int len=0;Node<DataType> *temp=front;while(temp!=NULL){len++;temp=temp->next;}return len;//可以这样循环来得到长度,也可以在加入元素和除去元素的函数里面len++和len--}}int main()
{int number;LinkQueue<int> lq;cout<<"1-10入队:\n";for(int i=1; i<=10; i++){lq.enQueue(i);}lq.displayQueue();cout<<"队首元素是:"<<lq.getFront()<<endl;cout<<"连续出队11个整数\n";for(int i=0; i<11; i++){if(!lq.isEmpty()){cout<<lq.getFront()<<"出队"<<endl;lq.deQueue();}else{cout<<"队列为空,无法出队。"<<endl;}}lq.displayQueue();cout<<"10-16入队\n";for(int i=10; i<=16; i++){lq.enQueue(i);}
lq.displayQueue();//创建一个字符串队列cout<<"压入三个字符串到队列:\n";LinkQueue<string> strQueue;strQueue.enQueue("Hello");strQueue.enQueue("Wold");strQueue.enQueue("C++");strQueue.displayQueue();cout<<"清空队列\n";strQueue.clearQueue();strQueue.displayQueue();return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/702841.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【PyQt5桌面应用开发】3.Qt Designer快速入门(控件详解)

一、Qt Designer简介 Qt Designer是PyQt程序UI界面的实现工具&#xff0c;可以帮助我们快速开发 PyQt 程序的速度。它生成的 UI 界面是一个后缀为 .ui 的文件&#xff0c;可以通过 pyiuc 转换为 .py 文件。 Qt Designer工具使用简单&#xff0c;可以通过拖拽和点击完成复杂界面…

仿12306校招项目业务二(列车检索)

目录 验证数据 加载城市数据 查询列车站点信息 查询列车余票信息 构建列车返回数据 12306 项目中列车数据检索接口路径 &#xfeff; TicketController的pageListTicketQuery&#xfeff;。 GetMapping("/api/ticket-service/ticket/query")public Result<T…

查看笔记本电池健康状态-windows11

在 Windows 11 中获取详细的电池报告 Windows 11 中内置的 Powerfg 命令行选项来生成电池报告。 在任务栏上选择“搜索”&#xff0c;键入“cmd”&#xff0c;长按&#xff08;或右键单击&#xff09;“命令提示符”&#xff0c;然后选择“以管理员身份运行” ->“是”。 …

Mac使用K6工具压测WebSocket

commend空格 打开终端&#xff0c;安装k6 brew install k6验证是否安装成功 k6 version设置日志级别为debug export K6_LOG_LEVELdebug执行脚本&#xff08;进入脚本所在文件夹下&#xff09; k6 run --vus 100 --duration 10m --out csvresult.csv script.js 脚本解释&…

自定义神经网络三之梯度和损失函数激活函数

文章目录 前言梯度概述梯度下降算法梯度下降的过程 optimize优化器 梯度问题梯度消失梯度爆炸 损失函数常用的损失函数损失函数使用原则 激活函数激活函数和损失函数的区别激活函数Relu-隐藏层激活函数Sigmoid和Tanh-隐藏层Sigmoid函数Tanh&#xff08;双曲正切&#xff09; &l…

【前端】nginx 反向代理,实现跨域问题

前面讲跨域的问题&#xff0c;这篇 C# webapi 文章里面已经说过了。在上述文章中是属于从服务器端去允许访问的策略去解决跨域问题。而这里是从客户端的角度利用反向代理的方法去解决跨域问题。 反向代理&#xff1a;其原理就是将请求都接收到一个中间件&#xff08;中间地址&a…

IO 作业 24/2/26

1>思维导图 1> 使用消息队列完成两个进程间相互通信 #include<myhead.h> //定义一个消息类型 struct msgbuf {long mtype; //消息类型char mtext[1024]; //消息正文 }; //定义一个宏&#xff0c;表示消息正文大小 #define MSGSIZE sizeof(struct msgbuf…

某款服务器插上4张TDP功耗75瓦PCIE卡无法开机的调试过程

1.服务器厂家说这款服务器测过别家的4卡&#xff0c;所以一开始并没有怀疑服务器硬件有问题 2.拔掉另外三张&#xff0c;只保留cpu0对应的riser0 slot0上的一张卡&#xff0c;仍然无法开机。 3.怀疑是这张pcie卡bar空间太大导致。换另一款bar空间小的卡&#xff0c;仍然无法开…

人工智能 — 点云模型

目录 一、点云模型1、三维图像2、点云1、概念2、内容 3、点云处理的三个层次1、低层次处理方法2、中层次处理方法3、高层次处理方法 二、Spin image 一、点云模型 1、三维图像 三维图像是一种特殊的信息表达形式&#xff0c;其特征是表达的空间中三个维度的数据。 和二维图像…

荣耀手机如何开启地震预警功能

1、打开荣耀手机&#xff0c;进入“设置”&#xff0c;在搜素栏输入“地震”。 2、进入“安全-应急预警通知”功能栏。 3、开启“地震预警”。 4、查看“预警演示教程”。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/e207e356bb634c11adf926c6a53e48cc.png…

Mysql学习之事务日志redolog深入剖析

Mysql 事务日志 redo log 事务有4种特性&#xff1a;原子性、一致性、隔离性和持久性。那么事务的四种特性到底是基于什么机制实现的呢&#xff1f; 事务的隔离性由锁机制实现。而事务的原子性、一致性和持久性由事务的redo日志和undo日志来保证。 REDO LOG 称为重做日志&…

OpenGL ES (OpenGL) Compute Shader 计算着色器是怎么用的?

OpenGL ES (OpenGL) Compute Shader 是怎么用的? Compute Shader 是 OpenGL ES(以及 OpenGL )中的一种 Shader 程序类型,用于在GPU上执行通用计算任务。与传统的顶点着色器和片段着色器不同,Compute Shader 被设计用于在 GPU 上执行各种通用计算任务,而不是仅仅处理图形…

挑战杯 基于情感分析的网络舆情热点分析系统

文章目录 0 前言1 课题背景2 数据处理3 文本情感分析3.1 情感分析-词库搭建3.2 文本情感分析实现3.3 建立情感倾向性分析模型 4 数据可视化工具4.1 django框架介绍4.2 ECharts 5 Django使用echarts进行可视化展示5.1 修改setting.py连接mysql数据库5.2 导入数据5.3 使用echarts…

供应链大数据:穿越经济迷雾的指南针

随着经济形势的变幻莫测&#xff0c;企业运营面临着前所未有的挑战。在这个充满不确定性的时代&#xff0c;供应链大数据如同一盏明亮的指南针&#xff0c;为企业提供精准的方向指引。下面&#xff0c;我们将深入探讨供应链大数据如何帮助企业洞察市场趋势、优化库存管理、降低…

Pod yaml文件详解

apiVersion: v1 #必选&#xff0c;版本号&#xff0c;例如v1 kind: Pod #必选&#xff0c;Pod metadata: #必选&#xff0c;元数据 name: string #必选&#xff0c;Pod名称 namespace: string #必选&#…

2.deeplabv3+的主干网络(mobilenet网络)

deeplabv3的论文中用了resnet网络&#xff0c;在这里用轻量级网络mobilenet替换resnet&#xff0c;下面分别是两个网络的代码。 1.mobilenet网络 代码如下&#xff1a; import math import os import cv2 import numpy as np import torch import torch.nn as nn import tor…

基于YOLOv8深度学习+Pyqt5的电动车头盔佩戴检测系统

wx供重浩&#xff1a;创享日记 对话框发送&#xff1a;225头盔 获取完整源码源文件已标注的数据集&#xff08;1463张&#xff09;源码各文件说明配置跑通说明文档 若需要一对一远程操作在你电脑跑通&#xff0c;有偿89yuan 效果展示 基于YOLOv8深度学习PyQT5的电动车头盔佩戴检…

Java学习——泛型通配符

Java泛型的通配符?&#xff08;问号&#xff09;是一种特殊的类型参数&#xff0c;用于表示未知的类型。通配符可以在使用泛型类型时提高代码的灵活性&#xff0c;使得一个泛型容器能够引用多种不同类型的泛型对象。主要有三种类型的通配符使用场景&#xff1a;无界通配符、有…

网络防御-内容安全

目录 内容安全IAE引擎DFI和DPI技术 --- 深度检测技术DPI --- 深度包检测技术DFI --- 深度流检测技术 入侵防御&#xff08;IPS&#xff09;入侵检测的方法异常检测误用检测 签名ID --- 签名的标识检测范围 内容安全 攻击可能只是一个点&#xff0c;防御需要全方面进行 IAE引擎 …

表单进阶--复选框

radio&#xff1a;单选框&#xff08;单选&#xff09; checkbox&#xff1a;多选框&#xff08;多选&#xff09; 语法&#xff1a;<input type"radio/checkbox" value"值" name"名称" checked"checked"/> type&am…