底层数据结构

容器适配器,默认底层容器为 deque,可指定 vectorlist。stack 不是独立的数据结构,而是对底层容器的封装,仅暴露栈顶一端的操作。实现后进先出(LIFO)语义:最后压入的元素最先弹出。

复杂度

操作复杂度说明
push(x)O(1)压入栈顶
emplace(args…)O(1)栈顶原位构造
pop()O(1)弹出栈顶,无返回值
top()O(1)返回栈顶引用
size() / empty()O(1)
swap(st2)O(1)交换两个栈

关键方法

方法说明
push(x)压入元素到栈顶
emplace(args…)栈顶原位构造
pop()弹出栈顶(返回 void)
top()返回栈顶元素的引用
size()元素个数
empty()判空

伪代码示例

stack<int> st

// 压入
st.push(1)
st.push(2)
st.push(3)

// 查看栈顶
print st.top()           // 3

// 弹出
st.pop()                 // 移除 3
print st.top()           // 2

// 括号匹配
stack<char> bracket
for each c in expression:
    if c is '(' or '[' or '{':
        bracket.push(c)
    else if c is ')' or ']' or '}':
        if bracket.empty():
            return false
        top = bracket.top()
        if not match(top, c):
            return false
        bracket.pop()
return bracket.empty()

// 十进制转二进制
stack<int> bits
while n > 0:
    bits.push(n % 2)
    n = n / 2
while not bits.empty():
    print bits.top()
    bits.pop()

stack 没有 clear(),清空用 while (!empty()) pop()st = stack<int>()
stack 没有迭代器,遍历只能通过反复 top() + pop() 清空式输出。

相关链接