c++详解栈和队列——及模拟实现stack——queue——例题

初来乍到,望大家点点赞,点点关注,谢谢各位看官老爷

个人主页

 在c语言中我们已经模拟实现过栈和队列了,对其底层结构有了基本的认识

栈和队列的详讲

文章目录

目录

文章目录

前言

一、了解栈和队列是什么?

​编辑​编辑

二、stack模拟实现

1、库函数

 2、代码模拟实现

三、queue模拟实现

1、库函数

2、代码实现

四、题目中的应用 

1、题目

 2、解题思路

3、代码解题

总结



前言

我们本次栈和队列的模拟实现不在想c语言中一样从底层出发,而是运用适配器,将运用我们已经学习过的类和对象、模板、vector和list等来模拟实现。

适配器的解释:电脑的适配器是将220V的电压转化为电脑所能承受的电压,而在c++中的适配器是将我们现学习过的知识通过整理为一个新的类;在C++中,适配器可以用来使不兼容的接口协同工作。适配器是一个类,它将一个现有的类的接口转换成另一个类的接口。


一、了解栈和队列是什么?

在c语言中有着非常详细的讲解

栈和队列的详讲

二、stack模拟实现

1、库函数

在库文件中,stack是用deque来封装,而我们目前没有学,所以用vector来实现。 

 

 2、代码模拟实现

template<class T, class Container = vector<T>>

我们的stack是一种容器适配器,而容器适配器就需要拥有容器;在我们学习模板的时候,知道模板参数取决于传递过来的类型是什么,在我们现学的容器中vector和stack底层比较相似,所以我们用了两个模板参数,一个为向栈里将来想要放入的数据类型,第二个模板参数为栈的类型。

	template<class T, class Container = vector<T>>class stack{public:
//由于是容器封装的,所以容器的各个函数我们在这里也是可以调用的void push(const T& x){_con.push_back(x);}void pop(){_con.pop_back();}T& top(){return _con.back();}bool empty(){return _con.empty();}size_t size(){return _con.size();}private://		vector<T> _v;Container _con;//将传递过来的容器封装封装为_con};

 类和对象不仅可以封装内置类型,或者自定义类型,它还可以封装一些容器进去。

三、queue模拟实现

1、库函数

 

2、代码实现

这里的容器是deque也是没有接触过,所以我们用list代替

	template<class T, class Container = list<T>>class queue{public:void push(const T& x){_con.push_front(x);}void pop(){_con.pop_back();}T& front(){return _con.front();}T& back(){return _con.back();}bool empty(){return _con.empty();}size_t size(){return _con.size();}private:Container _con;};

由于是容器封装的,所以容器的各个函数我们在这里也是可以调用的,前提是这个容器中存在这些函数。

四、题目中的应用 

1、题目

最小栈

 2、解题思路

我们搭建两个栈,一个存放原始数据,一个存放最小数据

入栈:当存最小数栈为空时,我们就将需要插入的val插入,当val是最小数的时候,我们就再向最小栈插入最小栈的栈顶,也就是最小数。

出栈:两个栈同时出;

栈顶元素我们就用原始数的栈;

最小栈顶就用最小数栈;

3、代码解题

class MinStack {
public:MinStack() {}void push(int val) {st1.push(val);if(st2.empty()||val<=st2.top()){st2.push(val);}else{st2.push(st2.top());}}void pop() {st1.pop();st2.pop();}int top() {return st1.top();}int getMin() {return st2.top();}private:std::stack<int> st1;//存放常规数据std::stack<int> st2;//存放最小数
};/*** Your MinStack object will be instantiated and called as such:* MinStack* obj = new MinStack();* obj->push(val);* obj->pop();* int param_3 = obj->top();* int param_4 = obj->getMin();*/


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

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

相关文章

【信号与系统杂谈 - 1】为什么拉普拉斯变换有收敛域而傅里叶变换没有

这个问题是我在推导傅里叶变换的时移特性公式和拉普拉斯变换的延时特性公式时发现的&#xff08;即拉氏变换总是需要考虑收敛域的原因&#xff09; 援引知乎上的回答解释

人工智能论文:GPT, GPT-2, GPT-3 对比和演进的思路

2018.6 GPT&#xff1a; Improving Language Understanding by Generative Pre-Training 第一篇主要强调 无监督预训练有监督微调transformer 主要成果&#xff1a; 1&#xff0c;无监督预训练&#xff1a;使得模型能够从海量未标记数据中自主学习&#xff0c;为后续任务提供了…

(免费人工智能机器人、周报通、AI中文站、choose-car、智造喵)分享好用的ChatGPT

目录 1、ChatGPTer - 免费人工智能机器人 2、周报通 3、 AI中文站 - chat.7jm.cn 人工智能,稳定高效

(暗虫AI、一站式、酷盖、智言智语、靠谱AI)分享好用的ChatGPT

目录 1、暗虫AI 2、GPT中文站 - 一站式AI解决方案 3、酷盖AI实验室

【Linux系统编程】第十一弹---编辑器vim使用

✨个人主页&#xff1a; 熬夜学编程的小林 &#x1f497;系列专栏&#xff1a; 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】 目录 1、vim的基本概念 2、vim的基本操作 3、vim插入模式命令集 4、vim正常(命令)模式命令集 5、vim末行模式命令集 6、vim操作…

支持向量机回归(概念+实例)

目录 前言 一、基本概念 1. 支持向量机回归的原理 2. 支持向量机回归的工作方式 3. 支持向量机回归的优缺点 4. 支持向量机回归的应用 二、实例 前言 支持向量机&#xff08;Support Vector Machine&#xff0c;SVM&#xff09;是一种强大的机器学习算法&#xff0c;最初…

安装 MySQL 数据库服务器

安装 MySQL 数据库服务器 MySQL 是一种流行的开源关系型数据库管理系统&#xff0c;提供了稳定、高性能的数据库解决方案。下面将介绍在 Windows、Linux 和 macOS 上安装 MySQL 数据库服务器的步骤。 在 Windows 上安装 MySQL 下载 MySQL 安装包&#xff1a;从 MySQL 官方网站…

数据结构与算法(Java版) | 详解十大经典排序算法之一:插入排序

接下来&#xff0c;我来给大家讲解第三种排序算法&#xff0c;即插入排序。 基本介绍 首先&#xff0c;我们来看下插入排序的基本介绍。 插入排序&#xff0c;其属内部排序法&#xff0c;是对于欲排序的元素以插入的方式来找寻该元素的适当位置&#xff0c;以便最终达到排序…

java集合框架总结

简介 Java 集合框架&#xff08;Java Collections Framework, JCF&#xff09;是 Java 平台的一部分&#xff0c;为数据的存储和操作提供了一整套强大的接口和实现。Java 集合框架不仅仅是一些数据结构的聚合&#xff0c;它通过一组精心设计的接口和类提供了数据操作的各种算法…

k8s复制pod里的文件到宿主机

要在Kubernetes中复制Pod里的文件到宿主机&#xff0c;可以使用kubectl cp命令。以下是一个基本的命令格式和示例&#xff1a; 命令格式: kubectl cp <namespace>/<pod-name>:/path/to/file/in/pod /path/to/target/location/on/host -c <container-name> …

R可视化:Venn图进阶版本

前言 最近看到一张不一样的韦恩图,添加了上下调基因数目的韦恩图,将其实现一下,用于自己的研究展示。 导入R包和数据 library(dplyr) library(tibble) library(ggplot2) library(ggVennDiagram) library(ggpubr) library(data.table)subgrp <- c("HC", &quo…

2024年十五届蓝桥杯省赛大学B组真题(Java完整版)

2024年十五届蓝桥杯省赛大学B组真题&#xff08;Java&#xff09; 前言&#xff1a; 赛后一直犹豫要不要对比赛进行复盘出个题解&#xff0c;拖到了现在&#xff0c;终于也是等到比赛结果出来&#xff0c;看到没有辜负个人期望成功取得省一&#xff0c;决定在国赛前对省赛进行…

根据txt文件绘制词云 -- python

根据一段文字绘制词云&#xff0c;我们有两种方法 &#xff0c;一种是登录专业的绘图网站http://yciyun.com/ 不过&#xff0c;貌似这个网站需要会员才可以体验&#xff0c;他只是给出了一些形状图案的词云&#xff0c;虽然看起来很精美&#xff0c;但是他不能让我们自己随意更…

开发文档、PHP身份核验接口,三要素实名认证接口

在这个数字时代&#xff0c;每一步的安全都至关重要。想象一下&#xff0c;一个简单、高效又安全的解决方案&#xff0c;让您的业务与客户之间建立起坚不可摧的信任桥梁&#xff0c;那便是翔云身份证三要素实名认证接口。 翔云身份证实名认证接口&#xff0c;实时联网&#xf…

没有管理员权限如何apt-get install

没有管理员权限如何apt-get install 一、下载包二、安装到本地三、添加路径到.bashrc文件 一般来说使用apt安装deb软件&#xff0c;必须要有root权限&#xff0c;因为apt安装时需要写 /usr/bin&#xff0c;/usr/lib&#xff0c;/usr/share等目录&#xff0c;而这些目录只有root…

LLMPerf测试工具使用指导

LLMPerf测试工具使用指导 备注&#xff1a; 翻译自官方仓库remadme文件。 用于评估 LLM API 性能的工具。 安装 git clone https://github.com/ray-project/llmperf.gitcd llmperfpip install -e . 基本用法 我们实施了 2 个测试来评估 LLM&#xff1a;一个用于检查性能的负载测…

第三节课,功能2:开发后端用户的管理接口5min(用户的查询/状态更改)【4】【9开始--本人】

一、代码任务 【录个屏】 二、写代码 2.1 代码文件位置 2.2 代码如下&#xff1a; 2.3 官方文档&#xff1a; 网址&#xff1a; 逻辑删除 | MyBatis-Plus (baomidou.com) 三、代码有bug&#xff0c;没有鉴权&#xff0c;表里添加一个字段。role 管理员 3.1 判断操作的人&am…

Slave SQL线程与PXB FTWRL死锁问题分析

1. 问题背景 2.27号凌晨生产环境MySQL备库在执行备份期间出现因FLUSH TABLES WITH READ LOCK未释放导致备库复制延时拉大&#xff0c;慢日志内看持锁接近25分钟未释放。 版本&#xff1a; MySQL 5.7.21PXB 2.4.18 慢查询日志&#xff1a; 备份脚本中的备份命令&#xff1a;…

spring boot 基础案例【3】构建RESTful API与单元测试

教程1 案例教程 案例仓库 在线编程 教程2 基础教程 教程仓库 在线编程 本案例所在的仓库 本案例所在的文档 进入正文 1.文件目录 1. Chapter21Application.java 地址&#xff1a;chapter2-1/src/main/java/com/didispace/chapter21/Chapter21Application.java package com.d…

Flink checkpoint 源码分析- Flink Checkpoint 触发流程分析

序言 最近因为工作需要在阅读flink checkpoint处理机制&#xff0c;学习的过程中记录下来&#xff0c;并分享给大家。也算是学习并记录。 目前公司使用的flink版本为1.11。因此以下的分析都是基于1.11版本来的。 在分享前可以简单对flink checkpoint机制做一个大致的了解。 …