每日一题 为了工作 2020 0304 第二题

Posted walxt

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了每日一题 为了工作 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();
	}
	
}

  

以上是关于每日一题 为了工作 2020 0304 第二题的主要内容,如果未能解决你的问题,请参考以下文章

每日一题 为了工作 2020 0322 第二十题

每日一题 为了工作 2020 0325 第二十三题

每日一题 为了工作 2020 0502 第六十一题

每日一题 为了工作 2020 0303 第一题

每日一题 为了工作 2020 0510 第六十八题

每日一题 为了工作 2020 0510 第六十八题