C++的STL队列实现栈

mac2024-01-30  45

使用C++的队列STL实现一个栈的数据结构 实现以下四个函数: 1.push(x) : 将元素x压入栈中 2.pop() : 弹出(移除)栈顶元素 3.top() : 返回栈顶元素 4.empty() : 判断栈是否是空

队列的数据结构为先入先出,栈的数据结构为先入后出; 即队列的元素顺序与栈中元素的顺序是相反的,所以只需要保证后面插入的元素是在前面的元素之前能够被弹出即可。 转换成栈之后的存储形态,弹出队列头部的元素即类似与弹出栈顶元素

这里插入元素时维护一个临时队列,即可将原先队列中的元素顺序做一个逆置调整。 实现算法如下(文末有测试代码):

void push(int x) { queue<int> tmp_queue; tmp_queue.push(x); /*对所有原队列的元素做顺序调整*/ while (!data.empty()) { tmp_queue.push(data.front()); data.pop(); } /*将调整后的顺序放入原队列,此时该队列元素顺序已经为栈存储的元素顺序*/ while (!tmp_queue.empty()) { data.push(tmp_queue.front()); tmp_queue.pop(); } }

实现如下:

#include <iostream> #include <algorithm> #include <queue> using namespace std; class My_stack { private: queue<int> data; public: void push(int x) { queue<int> tmp_queue; tmp_queue.push(x); while (!data.empty()) { tmp_queue.push(data.front()); data.pop(); } while (!tmp_queue.empty()) { data.push(tmp_queue.front()); tmp_queue.pop(); } } /*弹出元素,即弹出队列头部元素*/ int pop() { int x = data.front(); data.pop(); return x; } /*此时队列中的元素已经和栈存储的元素同步了,直接返回对头元素*/ int top() { return data.front(); } bool empty(){ return data.empty(); } }; int main() { My_stack s; cout << "construct the stack " << endl; int tmp; for (int i = 0;i < 5; ++i) { cin >> tmp; s.push(tmp); } cout << "top " << s.top() << endl; cout << "pop " << s.pop() << endl; cout << "top " << s.top() << endl; s.push(10); cout << "top after push '10' " << s.top() << endl; return 0; }

输出如下:

construct the stack 1 3 4 5 2 top 2 pop 2 top 5 top after push '10' 10
最新回复(0)