Java仅用队列结构实现栈结构和仅用栈结构实现队列结构【高频考点】

问题:

1、如何仅用队列结构实现栈结构?
2、如何仅用栈结构实现队列结构?

 

 

实现思路:

1、使用两个队列结构Queue1和Queue2 ,push操作一样,添加push()到Queue1,pop()核心是把 Queue1 除最后添加的元素"剪切"到 Queue2 ,最后poll()剩下的第一个元素,即为最后添加的元素,最后 再交换Queue1和Queue2和引用。

如:   Queue1:      队尾  --->   5  4  3  2  1      队首    

           Queue2:    

此时先后出队元素 1、2、3、4到Queue2中,Queue1中只剩下最后一个入队的元素5

 

           Queue1:      队尾  --->   5                      队首    

           Queue2:     队尾  --->    4  3  2  1         队首

              

代码实现:

package cn.itcats.array;

import java.util.LinkedList;
import java.util.Queue;

/**
 * 如何仅用队列结构实现栈结构?
 * @author fatah
 */
public class QueueToStack {
	private Queue<Integer> data;
	private Queue<Integer> help;
	
	public QueueToStack() {
		this.data = new LinkedList<Integer>();
		this.help = new LinkedList<Integer>();
	}
	
	//正常push添加进入Queue
	public void push(int value) {
		data.add(value);
	}
	
	//当在pop的时候,pop只留下一个元素,并把pop出来的元素加入到help队列中
	public int pop() {
		if(data.isEmpty()) {
			throw new RuntimeException("栈为空");
		}
		while(data.size() > 1) {
			//把data中的元素"剪切"到help队列,直到data只剩下一个元素
			help.add(data.poll());
		}
		//最后一个入队的元素
		int res = data.poll();
		//swap()交换help和data的引用指向
		swap();
		return res; 
	}
	
	public int peek() {
		if(data.isEmpty()) {
			throw new RuntimeException("栈为空");
		}
		while(data.size()>1) {
			help.add(data.poll());
		}
		int res = data.poll();
		help.add(res);
		swap();
		return res;
	}
	
	public void swap (){
		Queue<Integer> temp = help ;
		help = data ;
		data = temp ;
	}
}

 

 

2、使用栈结构实现队列结构

思路:

//准备popStack和pushStack
public void stackToQueue(){
    if(!popStack.isEmpty){
        return ;
    }
    while(!pushStack.isEmpty){
        popStack.push(pushStack.pop);
    }
}

 注意【重要!!!】

这种方式需要满足两个原则

1、push栈的数据要一次全部"倒"入pop栈

2、当"倒"数据的时候,对向栈不能含有数据,否则会乱套。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值