使用Java中的两个队列实现堆栈
时间:2020-02-23 14:34:25 来源:igfitidea点击:
在此程序中,我们将看到如何在Java中使用链接列表实现堆栈。
堆栈是抽象数据类型,演示在第一(LIFO)行为中持续。
我们将使用两个队列来实现相同的行为。
堆栈中有两个最重要的操作:让我们说你有两个队列:Queue1,queue2
- push :
- 如果queue1为空,则将元素添加到queue1
- 如果Queue1不为空,请将Queue1的所有元素添加到Queue2,将当前元素添加到Queue1并将Queue2的所有元素复制到Queue1.
- POP:只需删除Queue1的元素。
Java程序:
允许创建一个Java程序来使用链接列表创建堆栈。
package org.igi.theitroad; import java.util.LinkedList; import java.util.Queue; public class StackUsingTwoQueues { Queue<Integer> queue1; Queue<Integer> queue2; StackUsingTwoQueues() { queue1=new LinkedList<Integer>(); queue2=new LinkedList<Integer>(); } //Remove value from the beginning of the list for demonstrating behaviour of stack public void push(int i){ if(queue1.size()==0) queue1.add(i); else{ int sizeOfQueue1 = queue1.size(); //Copy elements of Queue1 to Queue2 for(int j=0 ; j<sizeOfQueue1 ; j++) queue2.add(queue1.remove()); queue1.add(i); //Copy elements for Queue2 to Queue1 for(int k=0 ; k<sizeOfQueue1 ; k++) queue1.add(queue2.remove()); } } public int pop(){ if(queue1.size()==0) throw new QueueEmptyException("Underflow Exception"); return queue1.remove(); } public static void main(String[] args) { StackUsingTwoQueues stack = new StackUsingTwoQueues(); stack.push(20); stack.push(40); stack.push(70); stack.push(50); stack.push(90); stack.push(110); stack.push(30); System.out.println("Removed element : "+ stack.pop()); stack.push(170); System.out.println("Removed element : "+ stack.pop()); } } /** * Exception to indicate that Queue is empty. */ class QueueEmptyException extends RuntimeException { private static final long serialVersionUID = 1L; public QueueEmptyException() { super(); } public QueueEmptyException(String message) { super(message); } }