这是啥?

栈是一种数据结构,遵循先入后出(FILO)原则。

具体来说,可以把栈想象成一堆书。

如果要把一本书放进书堆里,就要把这本书放在这堆书的最上面。

如果要拿出书堆中的一本书,就要从这堆书的最上面拿出这本书。

代码怎么写?

手写栈用数组模拟即可,这里不再过多介绍。

如果要使用 STL 栈,需要 #include<stack>stack 的用法:

  1. stack<int> s:定义一个存放 int 的栈。当然 int 也可以换成其他类型。
  2. s.push(a):将 a 压入栈。
  3. s.pop():弹出栈顶。
  4. s.empty():如果栈为空返回 1,否则返回 0
  5. s.size():返回栈当前的大小。
  6. s.emplace(a):同 s.push(a),但理论上更快。(C++11)

如果 a,b 是两个栈,可以用 a.swap(b) 来交换两个栈,理论上比 swap(a,b) 快。

有什么用?

貌似只能判括号表达式了……但是实现很简单,只需要扫一遍表达式:

  1. 如果当前字符是左括号,则直接入栈。
  2. 如果当前字符是右括号,

1.栈为空:表达式不合法。

2.栈顶和这个右括号不匹配:表达式不合法。

3.栈顶和这个右括号匹配:弹出栈顶。

  1. 其他字符:忽略。

扫完一遍,如果栈为空,则表达式合法,否则不合法。

原理:栈是先入后出的,当前的栈顶必然是当前位置前面的第一个没有匹配的左括号,

如果现在的右括号和前面的第一个没有匹配的左括号能匹配,

就把这两个括号匹配,下一个右括号就要匹配上一个左括号。

posted @ 2021-10-29 17:26  Jijidawang  阅读(62)  评论(12编辑  收藏  举报  来源