使用内部存储结构为栈的方法实现一个队列,要求实现该队列的如下方法: 1.push(x) : 将元素x压入队列中 2.pop() : 弹出(移除)队列头部元素 3.peek() : 返回队列头部元素(即为front) 4.empty() : 判断队列是否是空
栈的数据结构为先入后出,队列的数据结构为先入先出 使用栈来实现队列,同样想要让两者弹出的数据保持一直,内部的数据存储顺序是相反的;
可行的办法是维护一个临时栈,用来调换真正存储数据的栈中元素的存储顺序
实现如下:
void push(int x) { stack<int> tmp_data; /*维护一个临时栈,用来进行数据顺序的调换*/ while (!data.empty()) { tmp_data.push(data.top()); data.pop(); } tmp_data.push(x); while (!tmp_data.empty()) { data.push(tmp_data.top()); tmp_data.pop(); } }测试代码如下:
#include <iostream> #include <algorithm> #include <stack> using namespace std; class My_queue { private: stack<int> data; public: void push(int x) { stack<int> tmp_data; while (!data.empty()) { tmp_data.push(data.top()); data.pop(); } tmp_data.push(x); while (!tmp_data.empty()) { data.push(tmp_data.top()); tmp_data.pop(); } } int pop() { int x = data.top(); data.pop(); return x; } /*返回队列头部元素*/ int peek() { return data.top(); } bool empty() { return data.empty(); } }; int main() { My_queue q; cout << "construct the queue " << endl; int tmp; for (int i = 0;i < 5; ++i){ cin >> tmp; q.push(tmp); } cout << "pop " << q.pop() << endl; cout << "peek " << q.peek() << endl; q.push(10); cout << "peek push '10' " << q.peek() << endl; return 0; }输出如下:
construct the queue 1 2 3 4 5 pop 5 peek 4 peek push '10' 10