两个栈实现队列和两个队列实现栈 Java

àì夳堔傛蜴生んèń 2021-11-16 06:08 531阅读 0赞
  1. public class Test07 {
  2. /**
  3. * 用两个栈实现一个队列(先进后出)
  4. * 队列的声明如下:实现它的两个函数appendTail(队列尾部插入结点)和deleteHead(队列头部删除结点)
  5. */
  6. public static class MyQueue<T> {
  7. private Stack<T> stack1 = new Stack<>();
  8. private Stack<T> stack2 = new Stack<>();
  9. public MyQueue() {
  10. super();
  11. }
  12. /**
  13. * 队列尾部插入结点
  14. *
  15. * @param t
  16. */
  17. public void appendTail(T t) {
  18. stack1.push(t);
  19. }
  20. /**
  21. * 队列头部删除结点
  22. *
  23. * @return
  24. */
  25. public T deleteHead() {
  26. //先判断弹出栈是否为空,如果为空就将插入栈的所有数据弹出栈,
  27. //并且将弹出的数据压入弹出栈中
  28. if (stack2.isEmpty()) {
  29. while (!stack1.isEmpty()) {
  30. stack2.push(stack1.pop());
  31. }
  32. }
  33. if (stack2.isEmpty()) {
  34. throw new RuntimeException("queue is empty.");
  35. }
  36. return stack2.pop();
  37. }
  38. }
  39. /**
  40. * 用两个队列实现一个栈(先进后出)
  41. * 栈的声明如下:实现它的两个函数appendTail(栈顶插入结点)和deleteHead(栈顶删除结点)
  42. */
  43. public static class MyStack<T> {
  44. private Queue<T> queue1 = new LinkedBlockingQueue<>();
  45. private Queue<T> queue2 = new LinkedBlockingQueue<>();
  46. public MyStack() {
  47. super();
  48. }
  49. /**
  50. * 栈顶插入结点
  51. *
  52. * @param t
  53. * @return
  54. */
  55. public boolean appendTail(T t) {
  56. return queue1.add(t);
  57. }
  58. /**
  59. * 栈顶删除结点
  60. *
  61. * @return
  62. */
  63. public T deleteHead() {
  64. if (queue1.isEmpty() && queue2.isEmpty()) {
  65. throw new RuntimeException("stack is empty.");
  66. }
  67. //queue2不为空,把queue2的数据放入queue1中,直到queue2只剩下一个元素,弹出
  68. if (queue1.isEmpty()) {
  69. while (queue2.size() > 1) {
  70. queue1.add(queue2.poll());
  71. }
  72. return queue2.poll();
  73. }
  74. //queue1不为空,把queue1的数据放入queue2中,直到queue1只剩下一个元素,弹出
  75. if (queue2.isEmpty()) {
  76. while (queue1.size() > 1) {
  77. queue2.add(queue1.poll());
  78. }
  79. return queue1.poll();
  80. }
  81. return null;
  82. }
  83. }
  84. public static void main(String[] args) throws InterruptedException {
  85. MyQueue<Integer> myQueue = new MyQueue<>();
  86. myQueue.appendTail(1);
  87. myQueue.appendTail(2);
  88. myQueue.appendTail(3);
  89. myQueue.appendTail(4);
  90. System.out.println(myQueue.deleteHead());
  91. System.out.println(myQueue.deleteHead());
  92. System.out.println(myQueue.deleteHead());
  93. System.out.println(myQueue.deleteHead());
  94. MyStack<Integer> myStack = new MyStack<>();
  95. myStack.appendTail(1);
  96. myStack.appendTail(2);
  97. myStack.appendTail(3);
  98. myStack.appendTail(4);
  99. System.out.println(myStack.deleteHead());
  100. System.out.println(myStack.deleteHead());
  101. System.out.println(myStack.deleteHead());
  102. System.out.println(myStack.deleteHead());
  103. }
  104. }

发表评论

表情:
评论列表 (有 0 条评论,531人围观)

还没有评论,来说两句吧...

相关阅读