用队列实现栈功能(push,pop,top,empty)

首先分析一下队列和栈的特点

队列:先进先出,后进后出。
栈:先进后出、后进先出。
知道特性后,我们边思考边写。

#include<iostream>


//先声明一个栈类
class Stack{
public:
	void push(int data);
	int pop();
	int top();
	bool empty();
	
private:
	queue<int> m_data;
}

void Stack::push(int data)	//思路:后插入的元素要先出,那么就可以把队列中现有的元素都取出来依次放到data之后
{
	int queueSize = m_data.size();
	m_data.push(data);			//注意,虽然都是容器,但是追加元素的方式不同,vector是push_back
	
	while(queueSize)
	{
		m_data.push(m_data.front());
		m_data.pop();			//不要忘记拿到值之后,要在队列头清除该值
		queueSize--;
	}	
}

int Stack::pop()
{
	const int popMem = m_data.front();
	m_data.pop();
	
	return popMem;
}

int Stack::top()		//top操作就是要拿到栈顶的元素,即队列刚插入的(已经被移到队列最前)元素
{
	return	m_data.front();
}

bool Stack::empty()
{
	return m_data.empty();
}

当然,还有其他方法,这种方法是我个人比较喜欢的方法。

发布了21 篇原创文章 · 获赞 3 · 访问量 600

猜你喜欢

转载自blog.csdn.net/W96866/article/details/105694902