实现队列,并用两个队列实现栈(Java)

队列为FIFO原则。
以下代码在用两个队列实现栈时进栈时间复杂度为O(n),出栈时间复杂度为O(1),大家也可自行改成进栈O(1)出栈O(n)来练手。

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

public class MyQueueAndMystackByQueneTest {
	public static void main(String[] args) {
		MyQueue q = new MyQueue(2);
		try {
			q.enqueue(1);
			q.dequeue();
		} catch (Exception e) {
			e.printStackTrace();
		}
		
		MyStackbyqueue s = new MyStackbyqueue();
		s.push(1);
		s.pop();
	}
}

class MyQueue{
	
	private double[] data;
	private int tail,head,size;//size这里用来判断队列是否满了,与是否需要将head与tail置0
	
	public MyQueue(int size) {
		data = new double[size];
		tail = 0;
		head = 0;
		this.size = size;
	}
	
	public void enqueue(double x)throws Exception {
		if((tail + 1) % size == head)//这种控制方法会造成一个格子的浪费
			throw new Exception("Overflow");
		else {
			data[tail] = x;
			if(tail == size - 1)
				tail = 0;
			else tail++;
		}
	}
	
	public double dequeue()throws Exception{
		if(head == tail)
			throw new Exception("Underflow");
		else {
			if(head == size - 1) {
				head = 0;
				return data[size-1];
			}else return data[head++];
		}
	}
}


class MyStackbyqueue{
	
	Queue<Double> inoutbox = new LinkedList<>();
	Queue<Double> auxilaary = new LinkedList<>();
	
	public MyStackbyqueue() {}
	
	public void push(double x) {//进栈时间复杂度为O(n)
		
		while(!inoutbox.isEmpty())
			auxilaary.add(inoutbox.poll());
		
		inoutbox.add(x);
		
		while(!auxilaary.isEmpty())
			inoutbox.add(auxilaary.poll());
	}
	
	public double pop() {
		return inoutbox.poll();//出栈时间复杂度为O(1)
	}
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值