java 队列和栈相互实现
一、队列实现栈
public class queue2stack {
public static void main(String[] args) {
QS qs = new QS();
qs.push("1");
qs.push("2");
qs.push("3");
System.out.println(qs.pop());
System.out.println(qs.pop());
System.out.println(qs.peek());
QS qs2 = new QS();
qs2.push("1");
qs2.push("2");
qs2.push("3");
System.out.println(qs2.pop());
System.out.println(qs2.pop());
System.out.println(qs2.peek());
}
static class QS{
private Queue queueMain = new ArrayDeque();
private Queue queueWork = new ArrayDeque();
public boolean push(Object object){
try {
queueMain.offer(object);
return true;
} catch (Exception e) {
return false;
}
}
public int size() {
return queueMain.size();
}
public Object pop(){
if(queueMain.isEmpty()) {
return null;
}
Queue temp = new ArrayDeque();
int size = queueMain.size();
for (int i = 0; i < size - 1; i ++) {
temp.offer(queueMain.poll());
}
Object o = queueMain.poll();
int size1 = temp.size();
for (int i = 0; i < size1; i ++) {
queueMain.offer(temp.poll());
}
return o;
}
public Object peek(){
if(queueMain.isEmpty()) {
return null;
}
Queue temp = new ArrayDeque();
int size = queueMain.size();
for (int i = 0; i < size - 1; i ++) {
temp.offer(queueMain.poll());
}
Object o = queueMain.peek();
temp.offer(queueMain.poll());
int size1 = temp.size();
for (int i = 0; i < size1; i ++) {
queueMain.offer(temp.poll());
}
return o;
}
public boolean empty(){
return queueMain.isEmpty();
}
/**********优化***********/
public boolean push2(Object object){
try {
if (queueMain.isEmpty() && queueWork.isEmpty()) {
queueMain.offer(object);
}
if (queueMain.isEmpty()) {
queueWork.offer(object);
}
if(queueWork.isEmpty()) {
queueMain.offer(object);
}
return true;
} catch (Exception e) {
return false;
}
}
public Object pop2(){
if(queueMain.isEmpty() && queueWork.isEmpty()) {
return null;
}
if (queueMain.isEmpty()) {
while (queueWork.size() > 1) {
queueMain.offer(queueWork.poll());
}
return queueWork.poll();
}
if (queueWork.isEmpty()) {
while (queueMain.size() > 1) {
queueWork.offer(queueMain.poll());
}
return queueMain.poll();
}
return null;
}
public Object peek2(){
if(queueMain.isEmpty() && queueWork.isEmpty()) {
return null;
}
if (queueMain.isEmpty()) {
while(queueWork.size() > 1) {
queueMain.offer(queueWork.poll());
}
Object e = queueWork.peek();
queueMain.offer(queueWork.poll());
return e;
}
if (queueWork.isEmpty()) {
while(queueMain.size() > 1) {
queueWork.offer(queueMain.poll());
}
Object e = queueMain.peek();
queueWork.offer(queueMain.poll());
return e;
}
return null;
}
}
}
二、栈实现队列
public class Stack2queue {
public static void main(String[] args) {
SQ sq = new SQ();
sq.offer("a");
sq.offer("b");
sq.offer("c");
System.out.println(sq.poll());
System.out.println(sq.poll());
sq.offer("d");
sq.offer("e");
System.out.println(sq.poll());
System.out.println(sq.peek());
System.out.println(sq.poll());
System.out.println(sq.poll());
}
static class SQ{
private Stack stackMain = new Stack();
private Stack stackWork = new Stack();
public boolean offer(Object ele) {
stackMain.push(ele);
return true;
}
public Object poll() {
if (stackWork.empty()) {
while(stackMain.size() > 0) {
stackWork.push(stackMain.pop());
}
}
if (stackWork.empty()) {
return null;
}
return stackWork.pop();
}
public Object peek() {
if (stackWork.empty()) {
while(stackMain.size() > 0) {
stackWork.push(stackMain.pop());
}
}
if (stackWork.empty()) {
return null;
}
return stackWork.peek();
}
}
}
结果自行运行测试
java 队列和栈相互实现的更多相关文章
- java 队列和栈及示例
一.栈的实现: 1.Stack实现 接口实现: class Stack<E> extends Vector<E> {......} 常用的api函数如下: boolean is ...
- Java队列与栈转换中String.Valueof()使用
1. 由 基本数据型态转换成 String String 类别中已经提供了将基本数据型态转换成 String 的 static 方法 也就是 String.valueOf() 这个参数多载的方法 有下 ...
- 两个栈实现队列+两个队列实现栈----java
两个栈实现队列+两个队列实现栈----java 一.两个栈实现一个队列 思路:所有元素进stack1,然后所有出s ...
- 栈和队列数据结构的相互实现[LeetCode]
栈是先进后出,队列是先进后出,这里讨论一下两种数据结构之间的相互实现. 一.用两个栈实现队列 我们用一个栈来实现队列的进队操作(栈A),用另一个栈来实现队列的出队操作(栈B). 1.入队列: 把元素放 ...
- 2018.9.5 Java中使用栈来模拟队列
栈的规律是是先进后出 队列的规律是先进先出 栈模拟队列 首先我们定义两个栈,一个放数据,一个出数据,判断B栈是否有元素,有元素则直接pop:没有元素则需要我们将A里面的元素出栈然后放到B里面,再取出, ...
- 两个队列实现栈&两个栈实现队列(JAVA)
1,两个栈实现队列 题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 思路:栈的特点时先进后出,队列的特点是先进先出. 若此时有两个队列stack1,st ...
- LeetCode--255--用队列实现栈(java版)
使用队列实现栈的下列操作: push(x) -- 元素 x 入栈 pop() -- 移除栈顶元素 top() -- 获取栈顶元素 empty() -- 返回栈是否为空 注意: 你只能使用队列的基本操作 ...
- 剑指offer第二版面试题9:用两个队列实现栈(JAVA版)
题目:用两个队列实现栈. 分析:通过一系列的栈的压入和弹出操作来分析用队列模拟一个栈的过程,如图所示,我们先往栈内压入一个元素a.由于两个队列现在都是空,我们可以选择把a插入两个队列中的任一个.我们不 ...
- Java实现 LeetCode 225 用队列实现栈
225. 用队列实现栈 使用队列实现栈的下列操作: push(x) – 元素 x 入栈 pop() – 移除栈顶元素 top() – 获取栈顶元素 empty() – 返回栈是否为空 注意: 你只能使 ...
随机推荐
- Django之使用中间件解决前后端同源策略问题
问题描述 前端时间在公司的时候,要使用angular开发一个网站,因为angular很适合前后端分离,所以就做了一个简单的图书管理系统来模拟前后端分离. 但是在开发过程中遇见了同源策略的跨域问题,页面 ...
- Delphi - 通过WinAPI GetCursorPos实现鼠标位置的实时显示
通过WinAPI GetCursorPos实现鼠标位置的实时显示 有时候我们需要将鼠标的位置实时抓取出来,可以通过如下方式实现. 添加一个Timer控件,执行间隔改为100ms,双击控件输入如下代码: ...
- java设计模式8.迭代子模式、责任链模式、命令模式
迭代子模式 迭代子模式可以顺序地访问一个聚集中的元素而不必暴露聚集的内部表象.它将迭代逻辑封装到一个独立的迭代子对象中,从而与聚集本身分开.迭代子对象是对遍历的抽象化,不同的聚集对象可以提供相同的迭代 ...
- BZOJ2152 聪聪可可 (点分治)
2152: 聪聪可可 题意: 在一棵边带权的树中,问任取两个点,这两个点间的权值和是3的倍数的概率. 思路: 经典的点分治题目. 利用点分治在计算所有路径长度,把路径长度对3取模,用t[0],t[1] ...
- Codeforces Round #504 E - Down or Right 交互题
1023E 题意: 交互题.在一个有障碍地图中,问如何走才能从(1,1)走到(n,n),只能向右或者向左走.每次询问两个点,回复你这两个点能不能走通. 思路: 只用最多2*n-2次询问.从(1,1), ...
- Codeforces Round #481 (Div. 3) A. Remove Duplicates
题目地址:http://codeforces.com/contest/978/problem/A 题解:给一串长度为n的数组,然后删去相同的数字(从右往左). 方法:题目n和数组ai给的范围都很小,所 ...
- Fractions Again?! UVA - 10976
It is easy to see that for every fraction in the form 1k(k > 0), we can always find two positive ...
- 在React中使用Bootstrap
这几天想在react中用一下bootstrap,尽管有一个适配react的很好的库叫react-bootstrap,但我还是想直接使用bootstrap 可以在react项目中执行以下命令安装boot ...
- 【Offer】[49] 【丑数】
题目描述 思路分析 测试用例 Java代码 代码链接 题目描述 我们把只包含因子2.3和5的数称作丑数( Ugly Number).求按从小到大的顺序的第1500个丑数.例如,6.8都是丑数,但14不 ...
- 【LeetCode】56-合并区间
题目描述 给出一个区间的集合,请合并所有重叠的区间. 示例 1: 输入: [[1,3],[2,6],[8,10],[15,18]] 输出: [[1,6],[8,10],[15,18]] 解释: 区间 ...