《算法笔记》学习笔记

stack 常见用法详解

stack翻译为栈,是STL中实现的一个后进先出的容器。

1.stack的定义

//要使用stack,应先添加头文件#include <stack>, 并在头文件下面加上"using namespace std"
//定义
stack< typename > name;

2. stack容器内元素的访问

//由于栈(stack)本书就是一种后进先出的数据结构,在STL的stack中只能通过top()来访问栈顶元素
#include <stdio.h>
#include <stack>
using namespace std;
int main() {
stack<int> st;
for(int i = 1; i <= 5; i++) {
st.push(i); //push(i)用以把i压入栈,故此处依次入栈 1 2 3 4 5
}
printf("%d\n", st.top()); //top取栈顶元素
return 0;
}

3. stack常用函数实例解析

(1) push()

//push(x)将x入栈,时间复杂度为O(1)

(2) top()

//top()获得栈顶元素,时间复杂度为O(1)

(3) pop()

//pop()用以弹出栈顶元素,时间复杂度为O(1)
#include <stdio.h>
#include <stack>
using namespace std;
int main() {
stack<int> st;
for(int i = 1; i <= 5; i++) {
st.push(i); //将 1 2 3 4 5 依次入栈
}
for(int i = 1; i <= 3; i++) {
st.pop(); //连续三次将栈顶元素出栈,即将5 4 3 依次出栈
}
printf("%d\n", st.top());
return 0;
}

(4) empty()

//empty()可以检测stack内是否为空,放回true为空,返回false为非空,时间复杂度为O(1)
#include <stdio.h>
#include <stack>
using namespace std;
int main() {
stack<int> st;
if(st.empty() == true) { //一开始栈内没有元素,因此栈空
printf("Empty\n");
} else {
printf("Not Empty\n");
}
st.push(1);
if(st.empty() == true) { //入栈"1"后,栈非空
printf("Empty");
} else {
printf("Not Empty\n");
}
return 0;
}

(5) size()

//size()返回stack内元素的个数,时间复杂度为O(1)
#include <stdio.h>
#include <stack>
using namespace std;
int main() {
stack<int> st;
for(int i = 1; i <= 5; i++) {
st.push(i); //push(i)用以将i压入栈
}
printf("%d\n", st.size()); //栈内有5个元素
return 0;
}

3. stack的常见用途

  • 模拟实现一些递归,防止程序堆栈内存的现在而导致程序运行出错

STL stack 常见用法详解的更多相关文章

  1. STL priority_queue 常见用法详解

    <算法笔记>学习笔记 priority_queue 常见用法详解 //priority_queue又称优先队列,其底层时用堆来实现的. //在优先队列中,队首元素一定是当前队列中优先级最高 ...

  2. STL queue 常见用法详解

    <算法笔记>学习笔记 queue 常见用法详解 queue翻译为队列,在STL中主要则是实现了一个先进先出的容器. 1. queue 的定义 //要使用queue,应先添加头文件#incl ...

  3. STL map 常见用法详解

    <算法笔记>学习笔记 map 常见用法详解 map翻译为映射,也是常用的STL容器 map可以将任何基本类型(包括STL容器)映射到任何基本类型(包括STL容器) 1. map 的定义 / ...

  4. STL set 常见用法详解

    <算法笔记>学习笔记 set 常见用法详解 set是一个内部自动有序且不含重复元素的容器 1. set 的定义 //单独定义一个set set<typename> name: ...

  5. STL vector常见用法详解

    <算法笔记>中摘取 vector常见用法详解 1. vector的定义 vector<typename> name; //typename可以是任何基本类型,例如int, do ...

  6. STL pair 常见用法详解

    <算法笔记>学习笔记 pair 常见用法详解 //pair是一个很实用的"小玩意",当想要将两个元素绑在一起作为一个合成元素, //又不想因此定义结构体时,使用pair ...

  7. STL string 常见用法详解

    string 常见用法详解 1. string 的定义 //定义string的方式跟基本数据类型相同,只需要在string后跟上变量名即可 string str; //如果要初始化,可以直接给stri ...

  8. C++标准模板库(STL)——queue常见用法详解

    queue的定义 queue<typename> name; queue容器内元素的访问 由于队列本身就是一种先进先出的限制性数据结构,因此在STL中只能通过front()来访问队首元素, ...

  9. C++标准模板库(STL)——set常见用法详解

    set的定义 set<typename> name; typename可以是任何基本类型,如int.double.char.结构体等,也可以是STL标准容器,如vector.set.que ...

随机推荐

  1. 灰度变换,gama变换,对数,反对数变换

    学习DIP第2天 灰度变换,及按照一定规则对像素点的灰度值进行变换,变换的结果可以增强对比度,或者达到其他的效果(例如二值化,或者伽马变换),由于灰度变换为针对单个像素点的灰度值进行变换,素以算法复杂 ...

  2. c语言if-else的效率比较

    闲着没事测试下if-else的执行效率 测试环境:Mac pro i7 2.3Ghz ...编译器gcc 4.9,代码没有进行优化-O0: 测试代码:c代码1: int main(){ int n=1 ...

  3. springboot 生产环境与开发环境配置

    通过修改yml文件里的active属性,prod(生产环境) 与 dev (开发环境)

  4. 使用python播放音乐

    1.首先安装pygame,pip install pygame 2.上代码: import time import pygame #音乐路径 filepath=r"C:\Users\1473 ...

  5. Windows环境安装MySQL8.0.11

    网络开发数据库是必不可少的.曾经安装个Mysql,但是忘了.再次安装还是得百度.那还不如自己写篇博客记录一下呢,以后再忘记就看自己的博客好 Mysql官网安装地址(windows环境): https: ...

  6. 脚本:将git项目下载到本地并启动

    大致思路:从git上clone源代码到本地:使用mvn package将源代码达成war/jar包:将打好的包放到tomcatpath/webapps/下:到tomcatpath/bin/下执行res ...

  7. LeetCode 112. 路径总和(Path Sum)

    题目描述 给定一个二叉树和一个目标和,判断该树中是否存在根节点到叶子节点的路径,这条路径上所有节点值相加等于目标和. 说明: 叶子节点是指没有子节点的节点. 示例: 给定如下二叉树,以及目标和 sum ...

  8. mysql zip方式安装

    下载zip文件解压到安装目录,此时是没有data文件夹和my.ini文件的. 1.首先自己新建my.ini,内容如下: [client] port=3306 default-character-set ...

  9. ip效验和ip段的效验

      package com.juchen.utils; import javax.servlet.http.HttpServletRequest; /** * ip 相关的工具方法 */ public ...

  10. 如何用MATLAB GUI创建图形用户界面

    MATLAB是众多理工科学生及工程师经常使用的一款数学软件,除了可以实现数据处理,矩阵运算.函数绘制等功能外,MATLAB还可以实现图形用户界面的设计. 下面介绍如何让小白也能用GUI创建最基本的用户 ...