0
点赞
收藏
分享

微信扫一扫

【栈和队列】栈和队列的相互实现OJ练习【力扣-232、力扣-225】超详细的保姆级别解释

驚鴻飛雪 2022-02-24 阅读 37

【栈和队列】栈和队列的相互实现OJ练习【力扣-232、力扣-225】超详细的保姆级别解释

先赞后看好习惯 打字不容易,这都是很用心做的,希望得到支持你 大家的点赞和支持对于我来说是一种非常重要的动力 看完之后别忘记关注我哦!️️️

这边博主提供力扣答题的传送门,大家食用完文章可以通过传送门答题:

还没有学习栈和队列相关内容的伙伴们,可以通过传送门食用先做了解哦:【栈和队列】纯C实现栈和队列以及其基本操作-宝藏级别数据结构教程【保姆级别详细教学】

文章目录

OJ232 用栈实现队列

题目描述

在这里插入图片描述

解题思路和代码实现

有了这个思路,我们就可以轻易的写出代码了

//用栈实现队列
//pop():弹出队头元素
//peek():获取队头元素
//push():队尾插入元素
//empty():验空
class MyQueue {
public:
	stack<int>stIn;//输入栈
	stack<int>stOut;//输出栈
	MyQueue() {

	}
	//进数据的时候直接进就可以了
	void push(int x) {
		stIn.push(x);
	}
	int pop() {
		//只有当stOut为空的时候,才能从stIn中导入数据(导入stIn的全部数据)
		while (!stIn.empty()) {//将IN的数据倒入OUT里面,知道stIn为空
			stOut.push(stIn.top());
			stIn.pop();
		}
		int ret = stOut.top();
		stOut.pop();
		return ret;
	}
	//获取头部元素
	int peek() {
		int res = this->pop();//直接使用已经有了的pop函数
		stOut.push(res);
		return res;
	}
	bool empty() {
		return stIn.empty() && stOut.empty();
	}
};

OJ225 用队列实现栈

题目描述

在这里插入图片描述

用两个队列实现栈

有了这个思路,我们就可以很轻易的实现栈了。

//用队列实现栈
//这个思路和上面那个是完全不一样的
//我们如果用两个队列来实现栈的话
//第二个队列是完全用来备份数据的,也就是想弹出一个数字时,前面挡住的全部
//备份,pop完再放回去
class MyStack1 {
public:
	queue<int> que1;
	queue<int> que2;//pop时备份数据
	MyStack1() {

	}
	void push(int x) {
		que1.push(x);
	}
	int pop() {
		int size = que1.size();
		size--;
		while (size--) {
			que2.push(que1.front());//按顺序一个一个放到que2里面去
			que1.pop();
		}

		int ret = que1.front();//留下的那个就是要弹出去的值
		que1.pop();
		que1 = que2;//再将que2的值直接赋给que1
		while (!que2.empty()) {
			que2.pop();//清空que2
		}
		return ret;
	}
	int top() {
		return que1.back();//top对于栈来说是压栈那一边,所以是队列的back()
	}
	bool empty() {
		return que1.empty();
	}
};

用一个队列实现栈

//只用一个队列的思路就是,pop()的时候把前面挡住的弹出来再放到后面去跟着
//就是围一个圈圈
class MyStack {
public:
	queue<int>que;
	MyStack() {

	}
	//直接push()即可
	void push(int x) {
		que.push(x);
	}
	int pop() {
		int size = que.size();
		size--;//这个的作用就是留下一个真正要pop()的
		while (size--) {
			que.push(que.front());//一定要先压进去再pop掉,否则数据就丢了
			que.pop();
		}
		int ret = que.front();
		que.pop();
		return ret;
	}
	int top() {
		return que.back();
	}
	bool empty() {
		return que.empty();
	}
};

尾声

看到这里,相信你已经拿捏这两道经典OJ了,虽然它们难度不高,但是做为经典题,它的思路是值得我们学习的。
在走之前,如果感觉这篇博客对你有帮助的话,别忘了收藏点赞关注我哦!

举报

相关推荐

0 条评论