C++ LIFO队列实现:如何将FIFO队列转为后进先出模式?
如何将C++ FIFO队列代码修改为LIFO(栈)实现?
嘿,这个问题解决起来超简单!C++标准库已经为我们提供了专门实现**后进先出(LIFO)**行为的容器,完全不用自己手动造轮子。
最简便的实现方法:直接用std::stack
你原来的代码用的是std::queue(标准FIFO队列容器适配器),要改成LIFO只需要做几处微小的修改:
- 将
queue<string> q;替换为stack<string> q; - 将访问队首元素的
q.front()替换为访问栈顶元素的q.top()(栈的核心是操作最后入栈的元素) - 其余的
push()、pop()、empty()方法调用逻辑完全不变,因为std::stack也提供了一致的接口
修改后的完整代码如下:
#include <iostream> #include <stack> #include <string> using namespace std; int main(){ stack<string> q; cout << "Pushing one two three four\n"; q.push("one"); q.push("two"); q.push("three"); q.push("four"); cout << "Now, retrieve those values in LIFO order.\n"; while(!q.empty()) { cout << "Popping "; cout << q.top() << "\n"; q.pop(); } cout << endl; return 0; }
运行效果说明
原来的FIFO队列会按one → two → three → four的顺序弹出元素,而修改后的LIFO栈会按four → three → two → one的顺序弹出,完美符合后进先出的要求。
额外补充:手动模拟栈的备选方案
如果出于特殊需求不想用std::stack,也可以用std::vector或std::deque手动模拟栈行为:
- 用
push_back()代替push()添加元素 - 用
back()代替top()访问栈顶元素 - 用
pop_back()代替pop()移除栈顶元素
不过这种方法完全没必要,因为std::stack是标准库专门为LIFO场景优化设计的,代码可读性和维护性都更优。
内容的提问来源于stack exchange,提问作者Dennis Vymer
相关产品推荐
相关产品推荐

