#膜拜LeetCode的第一天1.2
接着上次Two Sum的尝试之后,才渐渐对LeetCode的题目要求,以及运用所给提供的头文件答题的答题方式有了一定的了解,用Clion debug也是很好笑,LeetCode有debug功能咩?还需要进步加强练习叭~
Implement Stack using Queues
根据题意要求用两个队列实现栈的功能
队列:先进先出
栈:先进后出
所以若要达到先进后出的效果,则先把一个数存入队列,比如先把1push入q1,然后把2push入q2,再把1从q1中弹出,push入q2,则q2中所存的数为:2 1,此时若出列,则2先出,1随后,则满足栈的功能,所以:
- 申明两个队列,头文件要include<queue ,e.g:queue<int q1来申明q1队列e.g:queue<int q1来创建q1队列
- 若q1为空,则把元素a入队,若此时另一个队列q2为空则不做操作,如不为空(说明有比a更早的元素b入队了),则把b元素pop出队,入队到q1,这样先入队的元素b反而排在a的后面。
- 再经过2操作之后,最后q1和q2只有一个队列不为空,那么pop函数就是将不为空的队列的首元素弹出,由于题目给的头文件是int,所以要返回首元素的值,运用q1.front()取出首元素的值。
- top函数也是取首元素的值,同理3
- empty函数,则q1和q2都empty的时候返回bool值1;
代码
The implement Queue using stacks
和上一道题正好相反,但是真情实感的要把我写哭了,明明是道easy的题,但是若是用两个栈(对!就是你想的那样,最简单的,倒过去就正好为队列)那么就会超出内存的限制,看完discuss之后,才发现大佬用的是递归,用一个栈就可以实现。
- 申明一个栈
- 若栈为空,则直接push
- 若不为空,用data来装栈顶的值,然后pop栈,递归调用函数,若此时为空,则push,不为空则在此重复data装值的操作,直到为空,返回,然后push(data),则把栈顶元素放入了栈底,然后递归回溯,就一次把元素按之前的倒序入栈。(就完成了!!!)