堆栈和队列算法-双向队列

news2024/12/23 13:10:00

目录

堆栈和队列算法-双向队列

C++代码


堆栈和队列算法-双向队列

双向队列(Double Ended Queues,DEQue)为一个有序线性表,加入与删除操作可在队列的任意一端进行。

具体来说,双向队列就是允许队列两端中的任意一端都具备删除和加入功能,而且无论是队列的左端还是右端,队首与队尾指针都是朝队列中央移动的。通常,双向队列的应用可以区分为两种:一种是数据只能从一端加入,但可以从两端取出;另一种是数据可以从两端加入,但只能从一端取出。

C++代码

下面的C++程序使用链表结构来设计一个有输入限制的双向队列,只能从双向队列的一端加入数据,但从这个双向队列中取出数据时可以分别从队列的前端和末尾取出。

#include<iostream>
using namespace std;

class Node {
public:
	int data;
	Node* next;
};

class Queue {
private:
	Node* front;
	Node* rear;
public:
	Queue() {
		front = nullptr;
		rear = nullptr;
	}
	void Push(int num) {
		Node* newNode = new Node;
		newNode->data = num;
		newNode->next = nullptr;
		if (rear == nullptr)
			front = newNode;
		else
			rear->next = newNode;
		rear = newNode;
	}
	void Pop_Front() {
		if (!(front == nullptr)) {
			if (front == rear)
				rear = nullptr;
			front = front->next;
		}
	}
	void Pop_Back() {
		if (!(rear == nullptr)) {
			Node* startNode = front;
			Node* tempNode = front;
			while (front->next != rear && front->next != nullptr) {
				front = front->next;
				tempNode = front;
			}
			front = startNode;
			rear = tempNode;
			if ((front->next == nullptr) || (rear->next == nullptr)) {
				front = nullptr;
				rear = nullptr;
			}
		}
	}
	void Print() {
		while (true) {
			if (front->next != nullptr) {
				cout << front->data << " ";
				Pop_Front();
			}
			else
				break;
		}
	}
};

int main() {
	Queue* queue = new Queue();
	char ch = ' ';
	while (ch != 'E') {
		cout << "输入I:往队列加入数据;输入F:从队列前取出数据;输入B:从队列后取出数据;输入E:结束程序" << endl;
		cout << "请输入:";
		cin >> ch;
		switch (ch)
		{
		case 'I':
			cout << "请输入数据:";
			int val;
			cin >> val;
			queue->Push(val);
			break;
		case 'F':
			queue->Pop_Front();
			break;
		case 'B':
			queue->Pop_Back();
			break;
		default:
			break;
		}
	}
	cout << "队列中的数据:";
	queue->Print();
	return 0;
}

输出结果

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

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

相关文章

Acrel-3000水电站厂用电管理系统实现电站的发、用电监控、设备管理和运维管理-安科瑞黄安南

NB/T 10861-2021《水力发电厂测量装置配置设计规范》对水电厂的测量装置配置做了详细要求和指导。测量装置是水力发电厂运行监测的重要环节&#xff0c;水电厂的测量主要分为电气量测量和非电量测量。电气测量指使用电的方式对电气实时参数进行测量&#xff0c;包括电流、电压、…

【VR开发】【Unity】【VRTK】2-关于VR的基础知识

【概述】 在VRTK的实操讲解之前&#xff0c;本篇先介绍几个重要的VR认识。 【VR对各个行业的颠覆】 如果互联网几乎把所有行业都重做了一遍&#xff0c;VR在接下来的几年很可能再把现有的行业都重做一遍&#xff0c;包括但不限于教育&#xff0c;房地产&#xff0c;零售&…

C#--继承

提高开发效率的一种手段 继承就是把大家共性的东西提取出来&#xff0c;共享 被僵尸咬一口你也是僵尸 C#不支持多重继承 C#类可以派生自另一个类和任意多个接口 继承具有单根性&#xff0c;一个派生类只能继承一个父类 如果没有写继承自那个类&#xff0c;默认继承object类&am…

面试官:聊聊kafka线上使用会有哪些问题?

哪些环节会造成消息丢失&#xff1f; 首先说说哪些环节会丢消息 消息生产者&#xff1a; &#xff08;1&#xff09;acks0&#xff1a; 表示producer不需要等待任何broker确认收到消息的回复&#xff0c;就可以继续发送下一条消息。性能最高&#xff0c;但是最容易丢消 息。大…

AMEYA360:村田量产面向汽车的1.0μF 0.18mm超薄LW逆转低ESL片状多层陶瓷电容器

株式会社村田制作所已开发出面向汽车ECU(电子控制单元)中使用的处理器、超小*(0.5mm1.0mm)且超薄的LW逆转低ESL片状多层陶瓷电容器“LLC15SD70E105ME01”&#xff0c;并于9月开始量产。该产品T尺寸标准值为0.16 0.02 mm(厚度为最大0.18 mm)&#xff0c;与普通多层陶瓷电容器不…

通配符/泛域名SSL证书

在互联网发展迅速的今天&#xff0c;许多网站都拥有多个子域名&#xff0c;例如www.example.com、blog.example.com和shop.example.com等。为了确保这些子域名之间的数据传输安全&#xff0c;通配符/泛域名SSL证书成为了一种广泛采用的解决方案。 1&#xff0c;什么是通配符/泛…

Kubernetes Taint(污点) 和 Toleration(容忍)

Author&#xff1a;rab 目录 前言一、Taint&#xff08;污点&#xff09;1.1 概述1.2 查看节点 Taint1.3 标记节点 Taint1.4 删除节点 Taint 二、Toleration&#xff08;容忍&#xff09; 前言 Kubernetes 中的污点&#xff08;Taint&#xff09;和容忍&#xff08;Toleration…

highcharts 3D环形饼图

1.下载安装highcharts npm install highcharts --save2.在页面引入 import highcharts from highcharts3.在main.js引入 import highcharts from highcharts import highcharts3d from highcharts/highcharts-3d highcharts3d(highcharts)4.html部分代码 <div class"…

时间复杂度为 O(nlogn) 的排序算法

归并排序 归并排序遵循 分治 的思想&#xff1a;将原问题分解为几个规模较小但类似于原问题的子问题&#xff0c;递归地求解这些子问题&#xff0c;然后合并这些子问题的解来建立原问题的解&#xff0c;归并排序的步骤如下&#xff1a; 划分&#xff1a;分解待排序的 n 个元素…

v-bind动态改变样式

通过v-bind切换样式&#xff0c;:class"{ active:true}"为true展示样式&#xff0c;false不展示。也可以由:style"{ width:percent %}"动态控制宽度。 注意后面是JS对象&#xff0c;所以后面的值不可以包含-&#xff0c;比如background-color会解析出错&a…

报修软件在企业管理中有哪些作用?有什么好用的设备质量管理软件?

在当今的信息化时代&#xff0c;企业需要不断加速自身的信息化建设&#xff0c;以适应日益激烈的市场竞争。在这个过程中&#xff0c;“的修”报修软件的引入对于企业设备报修与维护的管理显得尤为重要。本文将详细介绍报修软件的重要性以及其如何帮助企业实现更高效、更智能的…

毕业论文问卷分析思路

很多同学会通过收集问卷的方式获取论文研究需要的数据&#xff0c;但是收集到的问卷应该如何分析呢&#xff1f;问卷一般可以分为两类&#xff1a;非量表类与量表类问卷。不同类型的问卷有不同的分析思路&#xff0c;今天和大家探讨一下拿到一份问卷后&#xff0c;一般的分析思…

Day 15 python学习笔记

__str__ 用print打印对象时&#xff0c;会自动调用 class Test:def __init__(self,name):self.name name# 用print打印对象时&#xff0c;会自动调用def __str__(self):return f"姓名name的值是{self.name}"a Test("zhangsan") print(a)结果&#xff1…

40+专家齐聚共谋数据未来,StarRocks Summit 2023 议程公布!更多精彩议题等你探索...

数字经济时代&#xff0c;什么才是企业的核心竞争力&#xff1f; 答案是数据。 在过去的一年里&#xff0c;越来越多的企业率先行动起来&#xff0c;加入这场数智化的进程中&#xff0c;探寻最佳的底层数据架构模式和极致的数据分析方案。 作为数据进化的亲历者&#xff0c;Sta…

软考_软件设计师

算法&#xff1a; 1、直接插入排序 详解&#xff1a;https://blog.csdn.net/qq_44616044/article/details/115708056 void insertSort(int data[],int n){int i,j,temp;for(i1;i<n;i){if(data[i]<data[i-1]){temp data[i];data[i] data[i-1];for(ji-1;j>0&&am…

OPPO Find N3,解码“新商务场景”

2023行至尾声&#xff0c;这一年消费电子市场的整体表现&#xff0c;很难被评价为乐观。智能手机等大宗产品的需求疲软&#xff0c;技术越来越同质化&#xff0c;产品越来越成熟&#xff0c;出货量下行。国际数据公司&#xff08;IDC&#xff09;手机季度跟踪报告显示&#xff…

App测试基本流程以及注意事项

1 APP测试基本流程 1.1流程图 1.2测试周期 测试周期可按项目的开发周期来确定测试时间&#xff0c;一般测试时间为两三周&#xff08;即15个工作日&#xff09;&#xff0c;根据项目情况以及版本质量可适当缩短或延长测试时间。 1.3测试资源 测试任务开始前&#xff0c;检查…

弱覆盖栅格图层制作

栅格边界生成及图层制作 栅格边界polygon生成 提取的弱覆盖栅格数据中包含了栅格中心经度和栅格中心维度&#xff0c;我们根据栅格中心经纬度生成对应的栅格边界POLYGON&#xff08;20米*40米&#xff09; 计算公式&#xff1a;polygon(栅格中心经度-0.00017 栅格中心纬度0.00…

大数据之LibrA数据库系统告警处理(ALM-12004 OLdap资源异常)

告警解释 当Manager中的Ldap资源异常时&#xff0c;系统产生此告警。 当Manager中的Ldap资源恢复&#xff0c;且告警处理完成时&#xff0c;告警恢复。 告警属性 告警参数 对系统的影响 Ldap资源异常&#xff0c;Manager和组件WebUI认证服务不可用&#xff0c;无法对Web上层…

Syntax Error: TypeError: this.getOptions is not a function的解决(Vue)

报错信息&#xff1a; TypeError: this.getOptions is not a function 这个是在运行项目是遇到的问题 这个报错是类型错误&#xff0c;this.getOptions 不是一个函数 。这个错误一般就是less-loader库里的错误。 主要是less-loader版本太高&#xff0c;不兼容this.getOptions…