C++实现栈来模拟队列

C++实现栈来模拟队列

主要思路:栈是先进后出,队列是先进先出。我们可以用两个栈A和B来实现队列的功能,队列的入队用栈A的入栈来实现,出队的时候由于需要的元素在栈底,所以需要将栈A一个个出栈,再一个个压栈进栈B,整体算法流程就是:

  1. 入队:相当于栈A的入栈;
  2. 出队:首先首先检查栈B是否为空,不为空直接出栈,为空需要继续检查栈A是否为空,栈A不为空要将栈A的元素一个个出栈并压入栈B,直到栈A为空,之后栈B出栈。
#include 
#include 
#include 
#include 
using namespace std;

template
class MyQueue {
public:
//入栈A相当于入队
	void push(T t) {
		s_A.push(t);
	}
//主要一步就是栈B为空要栈A全部“补货”进栈B
	void pop()	{
		if (s_B.empty())	{
			while (!s_A.empty()) {
				s_B.push(s_A.top());
				s_A.pop();
			}
		}
		if (!s_B.empty()) {
			s_A.push(s_B.top());
			s_B.pop();
		}
	}
//输出s_B中的数据
	T front()	{
		if (s_B.empty()) {
			if (s_A.size() == 0)
				cout << "The queue is empty" << endl;
			while (!s_A.empty()) {
			s_B.push(s_A.top());
			s_A.pop();
			}
		}
		return s_B.top();
	}
private:
	stack s_A;
	stack s_B;
};


int main() {
	MyQueue mq;//
	cout << "inQueue: " << endl;
	mq.push(1);
	mq.push(2);
	mq.push(3);
	mq.push(4);
	mq.push(5);
	mq.push(6);
	mq.push(7);
	cout << endl;
	cout << "queue: " << endl;;
	for (int i = 0; i < 7; i++) {
		cout << mq.front()<<" ";
		mq.pop();
	}
	cout << endl;
	system("pause");
	return 0;
}

你可能感兴趣的:(算法面试,c++,算法)