zoukankan      html  css  js  c++  java
  • 每日一题 为了工作 2020 0304 第二题

    /**
    * 题目:
    * 编写一个类,用两个栈实现队列,支持队列的基本操作(add、poll、peek)
    * 分析:
    * 栈的特点是先进后出,而队列的特点是先进先出,我们可以用两个栈正好能把顺序
    * 反过来实现类似队列的操作。
    * 具体实现是一个栈作为压入栈,在压入数据时只往这个栈中压入,记为stackPush,
    * 另一个栈只作为弹出栈,在弹出数据时只从这个栈弹出,记为stackPop。
    * 因为数据压入栈的时候,顺序是先进后出的,那么只要把stackPush的数据在压入
    * stackPop中,顺序就变回来了。
    * 要求:
    * 1.如果stackPush要往stackPop中压入数据,必须一次性把stackPush中的
    * 数据全部压入。
    * 2.如果stackPop不为空,stackPush绝对不能想stackPop中压入数据。
    * @author 雪瞳
    *
    */

    * 分析 首先明确Java里面队列的基本知识

    Queue: 一个队列就是一个先入先出(FIFO)的数据结构,队列是一种特殊的线性表,它只允许在表的前端进行删除操作,而在表的后端进行插入操作。

    Queue接口与List、Set同一级别,都是继承了Collection接口。LinkedList实现了Deque接 口。

    * 常用方法

            add        增加一个元索                               如果队列已满,则抛出一个IIIegaISlabEepeplian异常
      remove   移除并返回队列头部的元素      如果队列为空,则抛出一个NoSuchElementException异常
      element  返回队列头部的元素                 如果队列为空,则抛出一个NoSuchElementException异常
      offer       添加一个元素并返回true           如果队列已满,则返回false
      poll         移除并返回队列头部的元素      如果队列为空,则返回null
      peek       返回队列头部的元素                 如果队列为空,则返回null
      put         添加一个元素                                 如果队列满,则阻塞
      take        移除并返回队列头部的元素           如果队列为空,则阻塞

    * LinkedList类实现了Queue接口,因此我们可以把LinkedList当成Queue来用

    * 代码

    import java.util.Stack;
    
    public class TwoStacksQueue {
    	private Stack<Integer> stackPush;
    	private Stack<Integer> stackPop;
    	//类的构造方法
    	public TwoStacksQueue() {
    		this.stackPop = new Stack<>();
    		this.stackPush = new Stack<>();
    	}
    	//添加一个元素
    	public void add(int pushInt) {
    		//将数据压入栈中
    		stackPush.push(pushInt);
    	}
    	//移除并返问队列头部的元素
    	public int poll() {
    		if(stackPop.empty() && stackPush.empty()) {
    			throw new RuntimeException("Queue is empty!");
    		}else if(stackPop.empty()) {
    			//当stackPop为空时候才可以向stackPop栈中压入元素
    			//stackPush一次压入数据必须将stackP内部的所有数据全部压入
    			while(!stackPush.empty()) {
    				//获取栈顶数据删除并输出后将元素压入栈stackPop中
    				stackPop.push(stackPush.pop());
    			}
    		}
    		return stackPop.pop();
    	}
    	//返回列表头部元素
    	public int peek() {
    		if(stackPop.empty() && stackPush.empty()) {
    			throw new RuntimeException("Queue is empty!");
    		}else if(stackPop.empty()) {
    			while(!stackPush.empty()) {
    				stackPop.push(stackPush.pop());
    			}
    		}
    		return stackPop.peek();
    	}
    	
    }
    

      

  • 相关阅读:
    复合文档(Compound Document)读写栗子
    JavaScript修改IE注册表
    mysql_real_connect 端口号说明
    _beginthreadex创建线程,立即执行?
    Access 是/否 字段
    JavaScript格式化日期输出
    STM32-串行SPI nor
    全球唯一标识符:GUID在线生成
    如何交叉编译Python到ARM-Linux平台(转)
    CMOS Sensor的调试经验分享(转)
  • 原文地址:https://www.cnblogs.com/walxt/p/12408675.html
Copyright © 2011-2022 走看看