您当前的位置: 首页 > 
  • 0浏览

    0关注

    674博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

用两个队列实现一个栈

沙漠一只雕得儿得儿 发布时间:2016-11-21 12:31:19 ,浏览量:0

package 栈与队列上;

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

public class MyStack {
	public Queue queue1 = new LinkedList();
	public Queue queue2 = new LinkedList();
	public int size;

	/**
	 * push方法只能向空的一个队列中添加元素
	 * 
	 * @param x
	 */
	public void push(int x) {
		if (empty() || !queue1.isEmpty()) {
			queue1.offer(x);
		} else {
			queue2.offer(x);
		}
		size++;
	}

	/**
	 * 两个队列相互倒腾,只对最后一个元素进行特殊处理
	 */
	public void pop() {
		if (!queue1.isEmpty()) {
			while (queue2.size() > 1) {
				queue2.offer(queue1.poll());
			}
			queue1.poll();
		} else {
			while (queue1.size() > 1) {
				queue1.offer(queue2.poll());
			}
			queue2.poll();
		}
		size--;
	}

	public int top() {
		if (!queue1.isEmpty()) {
			while (queue2.size() > 1) {
				queue2.offer(queue1.poll());
			}
			int k = queue1.poll();
			queue2.offer(k);
			return k;
		} else {
			while (queue1.size() > 1) {
				queue1.offer(queue2.poll());
			}
			int k = queue2.poll();
			queue1.offer(k);
			return k;
		}
	}

	public boolean empty() {
		return size == 0 ? true : false;
	}

	public static void main(String[] args) {
		MyStack stack = new MyStack();
		System.out.println("栈初始大小:" + stack.size);
		stack.push(1);
		stack.push(2);
		stack.push(3);
		stack.pop();
		stack.push(4);
		System.out.println(stack.top());
	}
}

关注
打赏
1657159701
查看更多评论
立即登录/注册

微信扫码登录

0.0372s