模拟实现简单栈和队列

news/2024/10/20 16:43:47/

一.栈的模拟实现

stack作为容器适配器实在容器的基础上再进行封装,因此实现较为简单。

#pragma once
#include<iostream>
#include<deque>
using namespace std;namespace cls
{template<class T,class Container = deque<T>>class stack{public:void push(const T& x){_con.push_back(x);}void pop(){_con.pop_back();}bool empty() const{return _con.empty();}const T& top() const{return _con.back();}size_t size() const{return _con.size();}private:Container _con;};}

二.队列的模拟实现

queue也是容器适配器,默认适配容器为deque,实现与stack基本同理。

#pragma once
#include<iostream>
#include<deque>
using namespace std;namespace cls
{ template<class T,class Container  = deque<T>>class queue{public:void push(const T& x){_con.push_back(x);}size_t size() const{return _con.size();}bool empty() const{return _con.empty();}void pop(){_con.pop_front();}const T& front() const{return _con.front();}const T& back() const{return  _con.back();}private:Container _con;};}

三.优先级队列

priority_queue底层其实是堆,是基于堆的一些算法实现出来的。它同时也是容器适配器,默认适配容器为vector,以下为模拟实现

#pragma once
#include<iostream>
#include<vector>
using namespace std;//仿函数
template<class T>
class Less
{
public:bool operator()(const T& x,const T& y){return x < y;}
};template<class T>
class Greater
{
public:bool operator()(const T& x,const T& y){return x > y;}
};namespace cls
{template<class T, class Container = vector<T>,class Compare = Less<T>>class priority_queue{public:void AdjustUp(int down){Compare com;int parent = (down - 1) / 2;int child = down;while (child > 0){if (com(_con[parent], _con[child])){swap(_con[parent], _con[child]);child = parent;parent = (child - 1) / 2;}else{break;}}}void AdjustDown(int down){Compare com;int parent = 0;int child = parent * 2 + 1;while (child <= down){if (child+1 <= down && com(_con[child], _con[child+1])){++child;}if (com(_con[parent], _con[child])){swap(_con[parent], _con[child]);parent = child;child = parent * 2 + 1;}else{break;}}}size_t size() const{return _con.size();}bool empty() const{return _con.empty();}const T& top() const{return _con[0];}void pop(){swap(_con[0],_con[_con.size()-1]);_con.pop_back();AdjustDown((int)_con.size()-1);}void push(const T& x){_con.push_back(x);AdjustUp((int)_con.size() - 1);}private:Container _con;};
}

希望这些对大家有所帮助。


http://www.ppmy.cn/news/1511653.html

相关文章

ROS 2中,CMakeList.txt常见语法

在ROS 2中&#xff0c;CMakeList.txt 文件扮演着配置和管理构建过程的重要角色。这个文件遵循CMake的语法&#xff0c;用于定义如何编译和链接源代码。下面是一些在ROS 2项目CMakeList.txt文件中常见的语法和用法。 1. 基本结构和命令 cmake_minimum_required(VERSION )&…

Python酷库之旅-第三方库Pandas(088)

目录 一、用法精讲 371、pandas.Series.sparse.density属性 371-1、语法 371-2、参数 371-3、功能 371-4、返回值 371-5、说明 371-6、用法 371-6-1、数据准备 371-6-2、代码示例 371-6-3、结果输出 372、pandas.Series.sparse.fill_value属性 372-1、语法 372-2…

Selenium元素定位

自动化的执行步骤&#xff1a; 1&#xff09;元素定位&#xff1a;定位到你想要操作的页面元素 2&#xff09;操作该页面元素。例如&#xff1a;点击、输入、选择…… WebDriver API Selenium提供的WebDriver API是一套用于定位操作浏览器页面元素的API&#xff08;别人写好的方…

实习三十:ansible

1、学习ansible的使用 ansible 主机ip|域名|组名|别名 -m ping|copy... ‘参数’ &#xff08;1&#xff09;下载ansible软件包 [root1 ~]# yum -y install ansible &#xff08;2&#xff09;创建ansible组 ansible通过⼀个主机清单功能来实现服务器分组。 Ansible的默认主…

如何建立一个既能快速记录又易于回顾的笔记系统?

在快节奏的学习和工作中&#xff0c;能够快速记录和回顾信息变得尤为重要。尤其对于编程学习者来说&#xff0c;构建一个高效、有序的笔记系统不仅可以提高学习效率&#xff0c;还能帮助我们在未来轻松回溯知识要点。本文将详细探讨如何打造一个既快速记录又易于回顾的笔记系统…

利用Python实现供应链管理中的线性规划与资源优化——手机生产计划1

目录 写在开头1. Python与线性规划的基础2.供应链管理中的资源优化3.利用Python进行供应链资源优化3.1 简单的优化实例3.2 考虑多种原材料3.3 多种原材料、交付时间与物流融合的情况 4.规范性分析在供应链管理中的应用价值写在最后 写在开头 在全球供应链日益复杂的背景下&…

第N8周:使用Word2vec实现文本分类

本文为365天深度学习训练营 中的学习记录博客原作者&#xff1a;K同学啊 一、数据预处理 任务说明: 本次将加入Word2vec使用PyTorch实现中文文本分类&#xff0c;Word2Vec 则是其中的一种词嵌入方法&#xff0c;是一种用于生成词向量的浅层神经网络模型&#xff0c;由Tomas M…

如何将sudo apt-get install xvfb安装的xvfb的所有文件打包成压缩包并放到另一台ubuntu服务器上运行

由于一些限制&#xff0c;ubuntu服务器A无法通过apt-get安装xvfb包&#xff0c;于是通过另一台可以安装xvfb的ubuntu服务器B&#xff0c;将已安装的xvfb进行打包&#xff0c;然后再解压到不能在线安装的服务器A中 一、打包xvfb sudo apt-get install xvfb 命令安装的 xvfb 软件…