一)Stack、队列简介
Stack规则: 先进后出、后进先出
队列规则: 先进先出,后进后出
二)用Stack实现队列
基本原理:
第一步:初始化一个主Stack,存储进栈数据、再初始化一个辅助Stack,存储出栈数据。
第二步:数据进队列时,直接进主Stack。
第三步:数据出队列时,判断辅助Stack是否有数据,如果没有数据,从主栈把数据pop()到辅助Stack,再从辅助Stack pop()数据出队。如果有数据,直接pop()数据出队。
队列方法:
1、队列是否为空:empty()
2、进队:push(E item)
3、出队,移除栈顶数据:E pop()
4、出队,获取栈顶数据,不移除栈顶数据:peek()
三)用Stack实现队列源码
第一步:初始化一个主Stack、再初始化一个辅助Stack
/**
* 自定义Stack队列
* @author ouyangjun
*/
public class StackQueue<E> {
private Stack<E> in = new Stack<E>(); // 主Stack
private Stack<E> out = new Stack<E>(); // 辅助Stack
}
第二步:队列是否为空
public boolean empty() {
return in.empty() && out.empty();
}
第三步:进队(直接把数据存储到主Stack)
public E push(E item) {
in.push(item);
return item;
}
第四步:出队,移除栈顶数据
public E pop() {
while (out.empty()) {
while(!in.empty()) {
out.push(in.pop()); // 从主Stack把数据pop()到辅助Stack
}
}
return empty() ? null : out.pop();
}
第五步:出队,获取栈顶数据,不移除栈顶数据
public E peek() {
while (out.empty()) {
while(!in.empty()) {
out.push(in.pop()); // 从主Stack把数据pop()到辅助Stack
}
}
return empty() ? null : out.peek();
}
第六步:main方法测试
public static void main(String[] args) {
StackQueue<String> queue = new StackQueue<String>();
queue.push("aaaa");
queue.push("bbbb");
queue.push("cccc");
System.out.println(queue);
queue.pop();
queue.push("dddd");
queue.push("eeee");
System.out.println(queue);
queue.pop();
queue.pop();
queue.pop();
System.out.println(queue);
}
识别二维码关注个人微信公众号
本章完结,待续,欢迎转载!
本文说明:该文章属于原创,如需转载,请标明文章转载来源!