使用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);
	}
}