面试数据结构:栈与队列

栈是后进先出,队列是先进先出。

栈常用于括号匹配、表达式求值、递归模拟和单调栈。

std::stack<int> st;

队列

队列常用于 BFS。

std::queue<int> q;

单调栈

单调栈用于快速寻找下一个更大或更小元素。

核心是维护一个单调序列,每个元素最多入栈出栈一次,因此复杂度通常是 O(n)

栈结构示意 图片来源:Wikimedia Commons,栈结构示意图。

括号匹配

栈最经典的题是括号匹配。遇到左括号入栈,遇到右括号时检查栈顶是否匹配。

bool valid(std::string s) {
    std::stack<char> st;
    for (char c : s) {
        if (c == '(') st.push(c);
        else {
            if (st.empty()) return false;
            st.pop();
        }
    }
    return st.empty();
}

真实题目会有三种括号,但核心不变。

队列与层次

队列常用来表达“按层推进”。BFS 不是简单地把 DFS 改成队列,它代表一种按距离从小到大扩展状态的方式。因此无权图最短路、迷宫最短步数这类题优先考虑 BFS。

评论

...

正在读取评论。