标签:后端 class 知识 实现类 实现 删除 ima col offer
/**
 * 题目:
 * 		编写一个类,用两个栈实现队列,支持队列的基本操作(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();
	}
	
}
标签:后端 class 知识 实现类 实现 删除 ima col offer
原文地址:https://www.cnblogs.com/walxt/p/12408675.html