C++ 2025-10-24 阅读时间: 15分钟

深入理解 C++ 中的栈和队列

Author

Yubo Feng

全栈学习者 / 五年级小学生 / c++进阶者

前言

数据结构(data)是一个庞大的结构,本篇记录了最基础的数据结构栈(stack)和队列(queue)的基础原理,也记录了我从蛙声一片到AC的记录,话不对说,我们开始吧!

栈(stack)是一种后进先出的数据结构(LIFO),栈的元素只能从栈的顶部添加或删除,栈的顶部称为栈顶,栈的底部称为栈底。栈的元素只能从栈的顶部添加或删除,栈的顶部称为栈顶,栈的底部称为栈底。栈的元素只能从栈的顶部添加或删除,栈的顶部称为栈顶,栈的底部称为栈底。栈的元素只能从栈顶进行添加或删除。

栈和队列概念图
栈(LIFO)的数据结构示意图

让我们来看题

题目描述

输入 n,紧接着需要进行 n 次操作,第 i 次操作为:“opi, xi

  • 如果 opi = 1,表示需要把 xi 压入栈。
  • 如果 opi = 2,忽略 xi,表示需要输出当前栈顶元素。如果此时栈内没有元素,则输出 -1
  • 如果 opi = 3,忽略 xi,表示需要弹出栈顶元素。如果此时栈内没有元素,则忽略此次操作。

输入格式

第一行一个整数 n

接下来 n 行,每行都是空格隔开的两个整数,第 i 行为:“opi, xi”。

输出格式

对每个操作 2,输出一行一个整数,即这个操作的答案。

输入数据

7
1 2
1 3
2 1
1 5
2 1
3 1
2 1

输出数据

3
5
3

数据规模与约定

对于 100% 的数据,保证 1 ≤ n ≤ 1001 ≤ opi ≤ 31 ≤ xi ≤ 1000

这里提供2种解法:

我们先看手写栈

1.注意弹出时判断是否空栈,是就输出-1

2.我们定义长度变量size就可以完成栈先进后出的操作了

3.输出栈顶元素时我们可以直接输出数组的最后一位,我们已经有size了,可以处理

想要代码?点这里

窝们继续看第二种解法

STL库中的栈的常规用法

栈的基本操作:

  • push() - 在栈顶添加元素
  • pop() - 移除栈顶元素
  • top() - 获取栈顶元素
  • empty() - 检查栈是否为空
  • size() - 获取栈中元素的数量

这种代码较为简单,请各位记住,就不看代码了

队列

队列是一种先进先出的结构,比较像窝们买冰激凌时派对的时候,入队时加入最后,出队时有2种办法 1.空间换时间(指设定strat,为开始在下标是几的位置,出队时输出并进行递增操作,看起来像“删除”了) 2.时间换空间(指挪位值,最终队列新的元素开头),当然可能也有其他方法,蒟蒻还不知道,神犇们可以写电子邮件告诉我:)

队列的题

题目描述

输入 n,紧接着需要进行 n 次操作,第 i 次操作为:“opi, xi

  • 如果 opi = 1,表示需要把 xi 压入队列。
  • 如果 opi = 2,忽略 xi,表示需要输出当前队头元素。如果此时队列内没有元素,则输出 -1
  • 如果 opi = 3,忽略 xi,表示需要弹出队头元素。如果此时队列内没有元素,则忽略此次操作

输入格式

第一行一个整数 n

接下来 n 行,每行都是空格隔开的两个整数,第 i 行为:“opi, xi”。

输出格式

对每个操作 2,输出一行一个整数,即这个操作的答案。

输入数据

7
1 2
1 3
2 1
1 5
2 1
3 1
2 1

输出数据

2
2
3

数据规模与约定

对于 100% 的数据,保证 1 ≤ n ≤ 1001 ≤ opi ≤ 31 ≤ xi ≤ 1000

这里仍然提供2种方法

1.手写

2.使用STL库进行制作

手写代码需要注意队列是先进先出的

不会?看这里!

STL库是需要引的(万能头不用)

队列的基本操作(STL库中):

  • push()enqueue() - 在队尾添加元素
  • pop()dequeue() - 移除队首元素
  • front() - 获取队首元素
  • back() - 获取队尾元素
  • empty() - 检查队列是否为空
  • size() - 获取队列中元素的数量

相信已经很简单了

#C++ #数据结构 #算法 #学习笔记
返回文章列表