用队列实现栈的基本操作

//队列实现栈
	//方法一:一个队列实现栈
class MyStack {

      /** Initialize your data structure here. */
      public MyStack() {
      }
     Queue<Integer> q = new LinkedList();
      /** Push element x onto stack. */
      public void push(int x)
      {
            q.add(x);
      }

      /** Removes the element on top of the stack and returns that element. */
      public int pop() {
      for(int i = 0;i < q.size()-1;i++)
      {
            int a = q.peek();
            q.poll(a);
            q.add(a);
      }
      int r = q.peek();
      q.remove(r);
      return r;
      }

      /** Get the top element. */
      public int top() {
            for(int i = 0;i < q.size()-1;i++)
            {
                  int a = q.peek();
                  q.poll();
                  q.add(a);
            }
            int r = q.peek();
			q.remove();
            q.add(r);
            return r;
      }

      /** Returns whether the stack is empty. */
      public boolean empty() {
      if(q.isEmpty())
      {
            return true;
      }
      return true;
      }
}

	//方法二:两个队列实现栈
class MyStack 
{
    /** Initialize your data structure here. */
    public MyStack() {}
    Queue<Integer> q1 = new LinkedList<>();
    Queue<Integer> q2 = new LinkedList<>();
    /** Push element x onto stack. */
 public void push(int x) 
 {
	if(!q1.isEmpty())
      {
         q1.add(x);
      }
      else
      {
         q2.add(x);
      }
 }
   
    /** Removes the element on top of the stack and returns that element. */
    public int pop()
	{
	if(!q1.isEmpty())
      {
          while(q1.size() > 1)
          {
             int a = q1.peek();
             q1.remove();
             q2.add(a);
          }
            int r = q1.peek();
            q1.remove();
            return r;
      }
     else
	 {
        while(q2.size() > 1)
        {
         int a = q2.peek();
         q2.remove();
         q1.add(a);
         }
         int r = q2.peek();
         q2.remove();
         return r;
     }
  }
    
    /** Get the top element. */
public int top()
{
	if(!q1.isEmpty())
     {
		while(q1.size() > 1)
        {
         int a = q1.peek();
         q1.remove();
         q2.add(a);
         }
        int r = q1.peek();
        q1.remove();
		//注意要将栈顶元素再添加回去,因为不是删除
        q2.add(r);
        return r;
     }
    else
	{
      while(q2.size() > 1)
      {
        int a = q2.peek();
        q2.remove();
        q1.add(a);
       }
        int r = q2.peek();
        q2.remove();
        q1.add(r);
        return r;
      }
}
    
    /** Returns whether the stack is empty. */
 public boolean empty() 
 {
	if(q1.isEmpty() && q2.isEmpty())
	{
	return true;
	}
	else
	{
	return false;
	}
 }
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值