当前位置:   article > 正文

【数据结构】栈和队列的相互实现

【数据结构】栈和队列的相互实现

欢迎浏览高耳机的博客

希望我们彼此都有更好的收获

感谢三连支持!

1.用栈实现队列

 

当队列中进入这些元素时,相应的栈1中元素出栈顺序与出队列相反,因此我们可以使用两个栈来使元素的出栈顺序相同;

通过将栈1元素出栈,再入栈栈2,此时出队列的顺序和出栈2的顺序相同,基于这个原理,我们开始实现代码:

  1. import java.util.ArrayDeque;
  2. public class MyQueueUsStack {
  3. public ArrayDeque<Integer> s1;
  4. public ArrayDeque<Integer> s2;
  5. public MyQueueUsStack(){
  6. s1 = new ArrayDeque<>();
  7. s2 = new ArrayDeque<>();
  8. }
  9. // 入队操作,直接将元素压入第一个栈
  10. public void push(int x){
  11. s1.push(x);
  12. }
  13. public int pop(){
  14. if(empty()){
  15. return -1;
  16. }
  17. if(s2.isEmpty()){
  18. // 如果第二个栈为空,则将第一个栈中的元素全部转移到第二个栈
  19. while (!s1.isEmpty()){
  20. s2.push(s1.pop());
  21. }
  22. }
  23. return s2.pop();
  24. }
  25. public int peek(){
  26. if(empty()){
  27. return -1;
  28. }
  29. if(s2.isEmpty()){
  30. while (!s1.isEmpty()){
  31. s2.push(s1.pop());
  32. }
  33. }
  34. return s2.peek();
  35. }
  36. public boolean empty(){
  37. return s1.isEmpty() && s2.isEmpty();
  38. }
  39. }

OJ

 https://leetcode.cn/problems/implement-queue-using-stacks/description/

2.用队列实现栈

当前一共有N个元素,当需要出栈栈顶元素67时,先将队列1中前N-1个元素放入到队列2中:

 

每次出栈时,只需要将不为空的队列的前N-1个元素放入空队列中,此时队列中的元素即为要出栈的元素;

入栈时,将元素放入不为空的队列中;若两个队列都为空,则放入创建的第一个队列中;

  1. import java.util.LinkedList;
  2. import java.util.Queue;
  3. public class MyStackUsQueue {
  4. public Queue<Integer> queue1;
  5. public Queue<Integer> queue2;
  6. public MyStackUsQueue(){
  7. queue1 = new LinkedList<>();
  8. queue2 = new LinkedList<>();
  9. }
  10. public void push(int x){
  11. if(empty()){
  12. queue1.offer(x);
  13. return;
  14. }
  15. if(!queue1.isEmpty()){
  16. queue1.offer(x);
  17. }else{
  18. queue2.offer(x);
  19. }
  20. }
  21. public int pop(){
  22. if(empty()){
  23. return -1;
  24. }
  25. if(!queue1.isEmpty()) {
  26. int size = queue1.size();
  27. for (int i = 0; i < size-1; i++) {
  28. queue2.offer(queue1.poll());
  29. }
  30. return queue1.poll();
  31. }else{
  32. int size = queue2.size();
  33. for (int i = 0; i < size-1; i++) {
  34. queue1.offer(queue2.poll());
  35. }
  36. return queue2.poll();
  37. }
  38. }
  39. public int peek(){
  40. if(empty()){
  41. return -1;
  42. }
  43. if(!queue1.isEmpty()) {
  44. int size = queue1.size();
  45. int ret = -1;
  46. for (int i = 0; i < size; i++) {
  47. ret = queue1.poll();
  48. queue2.offer(ret);
  49. }
  50. return ret;
  51. }else{
  52. int size = queue2.size();
  53. int ret = -1;
  54. for (int i = 0; i < size; i++) {
  55. ret = queue2.poll();
  56. queue1.offer(ret);
  57. }
  58. return ret;
  59. }
  60. }
  61. public boolean empty(){
  62. return queue1.isEmpty() && queue2.isEmpty();
  63. }
  64. }

 OJ:

https://leetcode.cn/problems/implement-stack-using-queues/solutions/


希望这篇博客能为你理解java编程思想提供一些帮助。

如有不足之处请多多指出。

我是高耳机。 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/662524
推荐阅读
相关标签
  

闽ICP备14008679号