【C++】stack 与 queue

news/2024/11/20 21:30:35/

stack 与 queue

  • stack
    • STL 容器中 stack 的使用
    • 模拟实现 stack
  • queue
    • STL 容器中 queue 的使用
    • 模拟实现 queue

stack

在数据结构中,我们了解到,stack 栈结构,是一种先进后出的结构,并且我们是使用顺序表来进行实现栈的操作的。

STL 容器中 stack 的使用

C++ STL 中stack的基本操作有:

在这里插入图片描述

代码测试练习:

void test0()
{stack<int> s;s.push(1);s.push(2);s.push(3);s.push(4);cout << "size() = " << s.size() << endl;cout << "top = " << s.top() << endl;if (s.empty())cout << "s is empty!" << endl;elsecout << "s is not empty!" << endl;s.pop();s.pop();s.pop();cout << "size() = " << s.size() << endl;cout << "top = " << s.top() << endl;if (s.empty())cout << "s is empty!" << endl;elsecout << "s is not empty!" << endl;}

在这里插入图片描述

模拟实现 stack

由于栈结构是“后进先出”的,因此在进行栈模拟时候我们可以使用顺序结构来进行,之前学习到 STL 容器中的 vector 容器是顺序结构的,我们可以直接复用:

namespace xx {       //定义自己的命名空间template<class T,class Container=std::vector<T>>   //定义模板类型class stack {public:stcak()      //构造方法不需要写,因为 Container 被定义为 vector 容器,会自动进行构造方法的调用 {}void push(const T& val){c.push_back(val);       //使用 vector 容器的尾插方法}void pop(){if (empty())return ;c.pop_back();            //出队,使用 vector 容器中的尾删操作-----------后进先出原则}T& top(){return c.back();   //获取栈顶元素,也就是最后一个入栈的元素------即复用 vector 容器中获取最后一个元素的方法}const T& top()const{return c.back();}size_T size()const{return c.size();         //返回 vector 容器的大小}bool empty()const{return c.empty();   //判断 vector 容器是否为空}private:Container c;    //定义 Container 为 vector 容器};}

代码测试:

在这里插入图片描述

queue

在数据结构中,我们知道 queue 队列是一种先进先出的结构。

STL 容器中 queue 的使用

C++ STL 中queue的基本操作有:

在这里插入图片描述

代码测试练习:

void test1()
{queue<int> q;q.push(1);q.push(2);q.push(3);q.push(4);q.push(5);cout << "size() = " << q.size() << endl;cout << "front = " << q.front() << endl;cout << "back = " << q.back() << endl;q.pop();q.pop();q.pop();cout << "size() = " << q.size() << endl;cout << "front = " << q.front() << endl;cout << "back = " << q.back() << endl;if (q.empty())cout << "q is empty!" << endl;elsecout << "q is not empty!" << endl;q.pop();q.pop();if (q.empty())cout << "q is empty!" << endl;elsecout << "q is not empty!" << endl;}

在这里插入图片描述

模拟实现 queue

队列是属于“先进先出”的结构,在队尾进行元素的插入,队头进行元素的删除操作,因此为了避免头删而导致大量元素的移动操作,我们避免使用顺序结构来实现队列,故可以复用 list 链表结构来实现:

namespace xx {          //自定义命名空间template<class T,class Container=std::list<T>>        //定义模板类型class queue {public:queue()         //构造方法会直接使用 list 方法的构造{}void push(const T& val){//尾插q.push_back(val);        //尾插------链表的尾插操作}void pop(){//头删if (empty())return; q.pop_front();          //队头出队----------链表的头删操作}T& front(){return q.front();        //获取队头元素---------链表的首节点信息}const T& front()const{return q.front();            }T& back(){return q.back();         //获取队尾元素----------链表的尾节点信息}const T& back()const{return q.back();}size_t size()const{return q.size();       //队中元素个数  -------->  链表中节点个数}bool empty()const{return q.empty();        //队列是否为空 -----------> 判断链表是否为空}private:Container q;};
}

代码测试:

在这里插入图片描述

ps:

代码需要多练多理解,今天的分享相对于来说还是比较简单的,需要详细的 stack 和 queue 的实现可以参考数据结构中的讲解哦 —> 添加链接描述

~今天的学习就到这里啦!期待周末考试一切顺心鸭!!!


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

相关文章

【2023】DevOps、SRE、运维开发面试宝典之Docker相关面试题

文章目录 1、docker的工作原理是什么2、docker的组成包含哪几大部分3、讲一下镜像的分层结构以及为什么要使用镜像的分层结构?4、简单描述一下Dockerfile的整个构建镜像过程?5、Docker的四种网络类型?6、Docker跨宿主机通讯的方式1、docker的工作原理是什么 docker是一个Cl…

拿下3个大厂offer的软件测试面试宝典,面试一文搞定

我是谁、工作几年、你上家公司做什么、负责什么、你的优势、为什么适合这个职位、我想做什么、在这个职位上想得到什么 【呕心沥血】耗时7天整理的金三银四必看的软件测试频面试题 涵盖 接口自动化测试框架面试题_哔哩哔哩_bilibili【呕心沥血】耗时7天整理的金三银四必看的软…

2022-2-23作业

一、通过操作Cortex-A7核&#xff0c;串口输入相应的命令&#xff0c;控制LED灯进行工作 1.例如在串口输入led1on,开饭led1灯点亮 2.例如在串口输入led1off,开饭led1灯熄灭 3.例如在串口输入led2on,开饭led2灯点亮 4.例如在串口输入led2off,开饭led2灯熄灭 5.例如在串口输…

【JAVA】线程和进程

&#x1f3c6;今日学习目标&#xff1a;线程和进程 &#x1f603;创作者&#xff1a;颜颜yan_ ✨个人主页&#xff1a;颜颜yan_的个人主页 ⏰本期期数&#xff1a;第三期 &#x1f389;专栏系列&#xff1a;JAVA 线程和进程前言一、进程与线程1.进程2.线程二、线程的创建2.1 继…

成功解决xshell7会话窗口只能显示一个的问题

文章目录 前言一. 问题复现二. 问题解决方法一方法二三. 拓展3.1 自定义快捷键3.2 将当前shell中的代码内容复制到记事本中3.3 xshell配置密钥登录3.3.1 生成密钥3.3.2 将密钥上传到服务器并设置3.3.3 用xshell密钥登录服务器总结前言 重点强调: 本文是解决xshell的窗口无论怎…

【WEB前端进阶之路】 HTML 全路线学习知识点梳理(上)

前言 HTML 是一切Web开发的基础&#xff0c;本文专门为小白整理&#xff0c;针对前端零基础的朋友们&#xff0c;手把手教你学习HTML&#xff0c;让你轻松迈入WEB开发的行列。 首先&#xff0c;感谢 橙子_ 在HTML学习以及本文编写过程中对我的帮助。 文章目录前言一.HTML简介1.…

Linux连接RDP远程服务工具集记录

目录 rdesktop 安装 实例 xfreerdp 安装 实例 remmia 介绍 rdesktop 安装

Vue3中watch的value问题

目录前言一&#xff0c;ref和reactive的简单复习1.ref函数1.2 reactive函数1.3 用ref定义对象类型数据不用reactive二&#xff0c;watch的value问题2.1 ref2.1.1 普通类型数据2.1.2 对象类型数据2.1.3 另一种方式2.2 reactive三&#xff0c;总结后记前言 在Vue3中&#xff0c;…