新学期被作业淹没,将博客晾在这太久了,不禁心生惭愧,于是将今晚本来计划去深圳湾公园散步的时间用来写文章。我在想,要写什么呢,看着案上的数据结构,就决定是你了!

看名字是第四章,我是不是错过了什么,其实是正在学栈和队列,剩下的三章会在国庆尽力填坑。

假设大家学过线性表,那么栈和队列就是特殊的线性表罢了。我上一次接触栈,是在汇编语言的学习处,是比较硬件的理解,现在学习数据结构,就是从软件、实用的角度来理解栈。

上图是栈的模型,栈是允许在同一端进行插入和删除操作的线性表。允许进行插入和删除操作的一端称为栈顶(top),另一端为栈底(bottom);栈底固定,而栈顶浮动;栈中元素个数为零时称为空栈。我们已经在汇编中知晓push和pop,压入push是增加数据,而弹出pop是删除数据 ,这些操作只能从栈顶最低地址作为约束的接口界面入手操作 ,但读取栈中的数据是随便的没有接口约束之说。很多人都误解这个理念从而对栈产生困惑。

如果你不能理解栈的模型,那想象一下手枪压膛,先压入的子弹总是最后射出,这就是栈的原理。

考你一个问题:设将整数1、2、3、4依次进栈,但只要出栈时栈非空,则可将出栈操作按任何次序夹入其中,请问一个可以输出多少种结果?

答案是十四种,你可以写出来吗?

ok,我们来康康栈的定义(code)

前面说过,栈本质上是顺序表,那么我们可以用顺序表(链表来实现)但是C++有STL栈容器——stack,极大的方便了我们(相当于人家帮你定义好了)

stack堆栈容器的C++标准头文件为 stack ,必须用宏语句 "#include <stack>" 包含进来,才可对 stack 堆栈的程序进行编译。

下面是基本使用方法:

堆栈初始化:

1.    stack()
    默认构造函数,创建一个空的 stack 对象。
    例如,下面一行创建一个空的堆栈对象 s 。
    stack<int>  s;

元素入栈
    stack堆栈容器的元素入栈函数为 push 函数。由于 C++ STL 的堆栈函数是不预设大小的,因此,入栈函数就不考虑堆栈空间是否为满,均将元素压入堆栈,从而函数没有标明入栈成功与否的返回值。
    如下是他的使用原型:
    void  push(const value_type& x)
    
    
元素出栈

    stack容器的元素出栈函数为 pop 函数,由于函数并没有判断堆栈是否为空,才进行元素的弹出,因此,需要自行判断堆栈是否为空,才可执行 pop 函数。
    void pop()
    
    下面的示例代码,将堆栈的所有元素全部出栈
    // stack<int>  s;
    while(!s.empty())
    { 
        s.pop();// 出栈
    }
    
    
取栈顶元素
    stack容器的栈顶元素的读取函数为 pop 函数,将取出最后入栈的元素,如下是它的使用原型
    value_type&  top()

堆栈非空判断
    随着堆栈元素不断出栈,堆栈可能会出现空的情况,因此,一般需要调用 empty 函数判断是否非空,才作元素出栈和取栈顶元素的操作。
    bool  empty(). 布尔型,返回0或1;
    判断堆栈是否为空,返回 true 表示堆栈已空,false 表示堆栈非空。

感谢:以上内容改自CSDN博主  lyj2014211626  的​​​​​​c++ stl栈容器stack用法介绍 好文:

​​​​​​c++ stl栈容器stack用法介绍

下面是对每个函数的用法:

//----------------------------------------- 读取堆栈的栈顶元素
#include <stack>
#include <iostream>
using namespace std;
int main()
{// 创建堆栈对象stack<int> s;// 元素入栈s.push(1);s.push(2);s.push(3);s.push(4);s.push(5);s.push(6);// 元素依次出栈while(!s.empty()){// 打印栈顶元素cout << s.top() << endl;// 出栈s.pop();}return 0;
}
//检查栈的大小是否可容纳压入元素
#include <stack>
#include <list>
#include <iostream>
#define STACK_SIZE  100   // 堆栈最大容量
using namespace std;
int main()
{// 用双向链表作堆栈的底层结构stack<int, list<int> >   s; // 堆栈未满,元素才能入栈if (s.size() < STACK_SIZE)s.push(68);if (s.size() < STACK_SIZE)s.push(1);if (s.size() < STACK_SIZE)s.push(17);// 元素出栈while (!s.empty()){// 打印 17 1 68cout << s.top() << endl;s.pop();}return 0;
}

感谢:以上内容改自CSDN博主  lyj2014211626  的​​​​​​c++ stl栈容器stack用法介绍 好文:

​​​​​​c++ stl栈容器stack用法介绍

2021-9-28 数据结构学习 第四章 - 栈 和 队列【1024Re】相关推荐

  1. 2022天勤考研数据结构笔记 第3章 栈和队列

    2022天勤考研数据结构笔记 第3章 栈和队列(更新中) 第3章 栈和队列 3.1 结构体定义 3.2 顺序栈 3.3 链栈 3.4 栈的应用 3.5 顺序队 3.6 链队 第3章 栈和队列 栈和队列 ...

  2. Java数据结构与算法(第四章栈和队列)

    2019独角兽企业重金招聘Python工程师标准>>> 本章涉及的三种数据存储类型:栈.队列和优先级队列. 不同类型的结构 程序员的工具 数组是已经介绍过的数据存储结构,和其他结构( ...

  3. 【算法基础】数据结构导论第三章-栈、队列和数组.pptx

    上课的课件分享,适合教学用. 文末提供下载 已发布: 数据结构导论第一章-绪论 数据结构导论第二章-线性表 本文参考百度文库的多篇文章. 如需下载ppt文件,请回复"sjjg3" ...

  4. 【数据结构】第三章 栈和队列

    1 栈的概念 栈:限定仅在表尾进行插入和删除操作的线性表,后进先出的线性表,简称LIFO结构 栈顶:表尾,允许插入和删除的一端 栈底:表头,不允许插入和删除的一端 空栈:不含任何数据元素的栈 2 栈的 ...

  5. 数据结构系列(四)栈与队列

    栈 定义 栈是一种特殊的线性表 操作 存储结构 从存储结构来看,分为顺序栈和链栈,同线性表的划分 应用 递归-菲波那切数列 后缀表达式-逆波兰表示   队列 定义 队列也是一种特殊的线性表 操作 队列 ...

  6. 数据结构应用题第三章栈和队列代码c

    若希望循环队列中的元素都得到利用,则需要设置一个标志域tag,并且以tag的值为0或1来区分队头指针front和队尾指针rear相同的队列状态是"空"还是"满" ...

  7. 【算法基础】数据结构导论第四章-树.pptx

    上课的课件分享,适合教学用. 文末提供下载 已发布: 数据结构导论第一章-绪论 数据结构导论第二章-线性表 数据结构导论第三章-栈.队列和数组 本文参考百度文库的多篇文章. 如需下载ppt文件,请在本 ...

  8. 《数据结构》第四章串,数组和广义表

    <数据结构>第四章 文章目录 <数据结构>第四章 4.1 串的定义 4.2 案例引入 4.3 串的类型定义,存储结构及其运算 4.3.1 串的抽象类型定义 4.3.2的存储结构 ...

  9. STM32固件库(标准外设库)入门学习 第四章OLED屏幕使用

    STM32固件库(标准外设库)入门学习 第四章OLED屏幕使用 本学习教程,参考B站江科大自化协STM32视频,型号为STM32F103C8T6. 文章目录 STM32固件库(标准外设库)入门学习 第 ...

最新文章

  1. Verilog中Dump函数及用法
  2. 从任何兼容 TWAIN 的设备获取图象的控件Dynamic Web TWAIN
  3. Oracle的resouce、unlimited tablespace 及如何把数据导入不同的表空间
  4. 普通人为什么要学习Python
  5. java封装对象数组_java解析JSON对象和封装对象的示例
  6. 用Python看蜜雪冰城店铺在哪个省份最多~
  7. 实现机器学习的循序渐进指南VI——AdaBoost
  8. Visio绘制ER图-
  9. CorelDRAWX4的VBA插件开发(三)VBA的必用基础知识
  10. php 打印去掉页眉页脚,window.print打印 去掉页眉页脚及打印链接
  11. 桌面虚拟化:软件为先
  12. 联想拯救者Y9000P唤醒修复
  13. pycharm typo
  14. 一个月刷完机器学习笔试题300题(10)
  15. AARRR模型的使用注意事项【防坑提醒】
  16. 搭建论坛discuz
  17. 人在四合院:我变成了何雨柱(二)
  18. [Azure DevOps] 如何安装并配置 Build Agent
  19. 特征工程(七):图像特征提取和深度学习
  20. 推荐官方开源 PInvoke 库 包含大量 win32 封装

热门文章

  1. SLAM/VIO/VINS AR/VR
  2. iPhoneX适配问题 iOS刘海屏 安全区域处理 IOS小黑条处理 IOS兼容处理
  3. iOS HTTPS证书不受信任解决办法
  4. 介绍一些比较方便好用的爬虫工具和服务
  5. ARM惹众怒,美国芯片行业也开始抛弃它,跟随中国芯片支持新架构
  6. PTC贴片保险的测试
  7. iOS之券商唯品会接入总结
  8. esp32邮件服务器,ESP32智能家居集线器的制作
  9. HBase+Spark技术双周刊 第四期 1
  10. 优秀的计算机简历,计算机优秀简历范文