栈和队列(2)--由两个栈组成的队列

要求:

编写一个类,用两个栈实现队列,支持队列的基本操作(add、poll、peek)。

思考:

队列的特点是先进后出,而栈的特点是先进后出。可以用两个栈正好把这个顺序反过来。

方法:

具体是一个栈实现压入栈,在压入数据时只往这个栈里压入,记为stackPush;另一个栈只作为弹出栈,在弹出数据时只从这个栈弹出,记为stackPop。

注意:

1.如果stackPush要网stackPop中压入数据,必须一次性把stackPush中的数据全部压入。

2.如果stackPop不为空,stackPush绝对不能向stackPop压入数据。

实验代码:

package algorithm_2;
import java.util.*;
public class TwoStackQueue {

	public Stack<Integer> stackPush;
	public Stack<Integer> stackPop;
	
	public TwoStackQueue(){
		stackPush = new Stack<Integer>();
		stackPop = new Stack<Integer>();
	}
	public void add(int pushInt)
	{
		stackPush.push(pushInt);
	}
	public void poll()
	{
		if (stackPop.empty() && stackPush.empty()){
			throw new RuntimeException("Queue is empty.");
		}
		else if (stackPop.empty()){
			while(!stackPush.empty()){
			//	System.out.println(stackPush.peek());
				stackPop.push(stackPush.pop());
			}
			
		}
		
	}

}
测试主函数:

package algorithm_2;
import algorithm_2.TwoStackQueue;
public class algorithm_2 {
	public static void main(String[] args){
TwoStackQueue mytest ; 
mytest = new TwoStackQueue();
int s[]={1,2,3,4,5};
for(int i = 0; i<s.length;i++){
	mytest.add(s[i]);
	System.out.printf("Push %d in stackPush\n",s[i]);
}

mytest.poll();

while(!mytest.stackPop.isEmpty()){
		System.out.printf("Poll %d in stackPop\n", mytest.stackPop.pop());	
}
	
}
}
测试结果:




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值