stack和queue的使用

前言

前面我们对string、vector、list做了介绍并对底层进行了实现!本期我们继续来介绍STL容器,stack和queue!

本期内容介绍

stack 常用接口的介绍

queue 常用接口的介绍

什么是stack?

这里的栈和我们C语言实现的数据结构的那个栈功能是一样的!栈是一种支持在一端进行插入和删除的顺序容器,遵循" 后进先出(LIFO)"的原则!库里面也说了它是一种容器适配器!什么是容器适配器,这里先不做介绍,等下一期模拟实现的时候再来详细介绍,本期只介绍如何使用!

常用接口介绍

empty

判断栈是否为空

size

获取栈里面的元素个数

top

获取栈顶元素(的引用)

push

在栈顶插入一个元素

pop

删除栈顶元素

OK,这就是栈的常用接口!很简单,我下面来演试一下:

void stack_test1()
{stack<int> st;st.push(1);st.push(2);st.push(3);st.push(4);st.push(5);bool emp = st.empty();cout << "empty : " << emp << endl;size_t sz = st.size();cout << "size : " << sz << endl;int top = st.top();cout << "top : " << top << endl;st.pop();top = st.top();cout << "top : " << top << endl;
}

OK,我们来做一道OJ来用一下stack吧!

最小栈

这道题让你实现一个最小元素的栈,每次可以用常量级别的时间复杂度获取当前栈中的最小元素!

这里用一个栈肯定是不行的!一个栈遍历的话不符合人家的常量级别的时间复杂度!既然一个栈不可以,那我们搞两个栈一个存当前栈的数据域,一个存当前栈里面的的最小元素!

如果普通栈为空或当前元素比普通栈的栈顶元素小得话插入到最小栈!

OK,我先画个图,走一遍刚刚的思路:

OK,我们实现一下:

class MinStack 
{
public:MinStack() {}void push(int val) {_elem.push(val);if(_min.empty() || val <= _min.top())//普通栈为空或当前元素比普通栈顶元素小,入最小栈_min.push(val);}void pop() {if(_min.top() == _elem.top())//如果普通栈的栈顶元素和最小栈相同,也要删最小栈的元素_min.pop();_elem.pop();}int top() {return _elem.top();//返回普通栈的栈顶元素}int getMin() {return _min.top();//获取最小栈的栈顶元素}private:stack<int> _elem;//普通栈stack<int> _min;//最小栈
};

OK,栈就介绍到这里,下面我们来看看队列!

什么是queue?

和栈一样这里的队列和我们数据结构那里的一样!队列是一种支持在尾部插入和在头部删除的线性容器!遵循"先进先出(FIFO)"的原则!不过这个的底层是带头双向循环链表!

这里他还是适配器,暂时不介绍,下一期模拟实现在介绍!

常用接口介绍

empty

判断队列是否为空

size

获取队列中的元素个数

front

获取队头元素(的引用)

back

获取队尾元素(的引用)

push

在队尾插入一个元素

pop

删除队头的数据

OK,队列的接口就这么多,也是很简单的!下面还是举个例子:

void queue_test1()
{queue<int> q;q.push(1);q.push(2);q.push(3);q.push(4);q.push(5);bool emp = q.empty();cout << "empty : " << emp << endl;size_t sz = q.size();cout << "size : " << sz << endl;int front = q.front();cout << "front : " << front << endl;int back = q.back();cout << "back : " << back << endl;q.pop();sz = q.size();cout << "size : " << sz << endl;
}

OK,这里对列这了有纯队列的题,他一般是作为算法的辅助工具的!经典的就是BFS!后面遇到了在介绍!

结束语: 路在自己脚下,没有人可以决定我的方向。

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

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

相关文章

拥有自己的云环境-域名及备案

序 唠叨两句 之前的文章&#xff0c;讲了如何购买一台云服务器&#xff0c;然后购买之后&#xff0c;如何操作云服务器。当买完云服务器之后&#xff0c;我们就可以使用云服务器提供的公网ip&#xff0c;访问到我们的服务器上。但是&#xff0c;这样怎么能体现我们一个老程序…

探秘KMP算法:解密字符串匹配的黑科技

KMP算法 在正式进入KMP算法之前&#xff0c;不得不先引经据典一番&#xff0c;因为直接去理解KMP&#xff0c;你可能会很痛苦&#xff08;别问&#xff0c;问就是我也痛苦过&#xff09;。所以做好前面的预热工作非常非常重要&#xff0c;为了搞明白KMP&#xff0c;在没见到KMP…

HTML5+CSS3+JS小实例:圣诞按钮

实例:圣诞按钮 技术栈:HTML+CSS+JS 效果: 源码: 【HTML】 <!DOCTYPE html> <html lang="zh-CN"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0&…

牛顿:Archetype AI 的开创性模型,实时解读真实世界的新宠儿

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

【Java】maven传递依赖冲突解决

传递依赖的概念&#xff1a; 传递依赖:&#xff1a; A.jar 依赖 B.jar, B.jar 依赖 C.jar, 这个时候我们就说B是A的直接依赖, C是A传递依赖; 传递依赖可能会产生冲突: 联系着上面, 新导入一个jar包D.jar, D依赖C.jar, 但是B依赖的1.1版本, 而D依赖的是1.2版本, 这时候C这个j…

深入理解指针2:数组名理解、一维数组传参本质、二级指针、指针数组和数组指针、函数中指针变量

目录 1、数组名理解 2、一维数组传参本质 3、二级指针 4、指针数组和数组指针 5、函数指针变量 1、数组名理解 首先来看一段代码&#xff1a; int main() {int arr[10] { 1,2,3,4,5,6,7,8,9,10 };printf("%d\n", sizeof(arr));return 0; } 输出的结果是&…

【Linux进阶之路】地址篇

文章目录 一、ipv4地址1. 基本概念2. 分类3.CIDR4.特殊的ip地址 二、IP协议1. 协议字段2.分片与重组3.路由 三、NAT技术1.公有和私有2.NAT3.NAPT 四、ARP协议1.MAC地址2.ARP 五、DHCP协议六、DNS协议尾序 一、ipv4地址 1. 基本概念 概念&#xff1a;IP地址&#xff0c;英文全…

2024-04-07 作业

作业要求&#xff1a; 1> 思维导图 2> 自由发挥应用场景实现一个登录窗口界面。 【可以是QQ登录界面、也可以是自己发挥的登录界面】 要求&#xff1a;尽量每行代码都有注释 作业1&#xff1a; 作业2&#xff1a; 运行代码&#xff1a; #include "myqwidget.h&quo…

前端三剑客 —— JavaScript (第二节)

目录 内容回顾 数据类型 基本数据类型&#xff1a; 引用数据类型&#xff1a; 常见运算 算术运算符 比较运算符 逻辑运算符 赋值运算符 自增/减运算符 三目运算符 位运算符 内容回顾 1.概述 2.基本数据 1.使用方式&#xff08;行内、页面、外部&#xff09; 2.对话框…

不要再使用 @Builder 注解了!有深坑呀!

曾经&#xff0c;我在《千万不要再随便使用 lombok 的 Builder 了&#xff01;》 一文中提到 Builder 注解的其中一个大坑会导致默认值失效&#xff01; 最近阅读了 《Oh !! Stop using Builder》 发现 Builder 的问题还不止一个&#xff0c;Builder 会让人误以为是遵循构建器…

Linux——计算机进程基础知识

计算机基础知识 1.计算机组成五大部件: (1) 运算器 &#xff1a;也叫算数逻辑单元&#xff0c;完成对数据的各种常规运算&#xff0c;如加减乘除&#xff0c;也包括逻辑运算&#xff0c;移位&#xff0c;比较等。 (2) 控制器 &#xff1a; 它是整个计算机系统的控制中心&…

基于LNMP环境上线QQ农场

目录 一.介绍 二. 环境准备 三.安装Mysql数据库 四.安装PHP 五.安装Nginx 六.测试Nginx服务于PHP服务是否能关联 七.项目上线 QQ农场源码&#xff1a;做本项目默认操作者有一定的基础知识与理解能力 链接&#xff1a;https://pan.baidu.com/s/1HF8GZ-yvNh7RbJ61nXOW-g?…