queue by one stack、two stack and three stack
来源:互联网 发布:淘宝网牛仔女装 编辑:程序博客网 时间:2024/06/10 03:48
1、用一个栈实现队列;
要想用一个栈实现队列,可以通过push过程中递归处理或者pop过程递归处理,这个方法虽然只是用了一个栈,但是是用了系统的栈。
2、使用两个栈实现队列;
一个栈用于push,另一个栈用于pop,如果pop栈空,就把push栈里面的数据放入pop栈里面。
3.用三个栈实现队列,最差的操作时间O(1);
用三个栈,从网上的结果来看,只有使用栈嵌套栈的方式才能够实现在O(1)的时间内将栈转换成队列。但是这种方式是用了n个嵌套栈,这种方式按照道理不满足需求的,不过作为一种实现思路。
初始状态:[]
插入数据a,变成:[[a][]]
插入数据b,变成[[a][[b][]]];
因此,在出栈的时候,需要pop两次,才能得到栈底的元素,当然这也是一个栈,然后pop这个栈,就可以得到目标元素了。
总结来说,就是每一层栈里面,只有两个元素,一个是下一层栈,另一个栈则保留了这一层的元素;
具体代码如下:
package com.frozenxia.algorithm.basic.exercises;import com.frozenxia.algorithm.basic.LinkedStack;public class QueuePowerdByStack<Item> {class QueueByOneStack {LinkedStack<Item> stack = new LinkedStack<Item>();public void enqueue(Item val) {stack.push(val);}public Item dequeue() throws Exception {if (stack.isEmpty())throw new Exception("stack is empty");Item val = stack.pop();if (stack.isEmpty()) {return val;}Item ret = dequeue();stack.push(val);return ret;}public boolean isEmpty() {return stack.isEmpty();}}class QueueByTwoStack {LinkedStack<Item> stack1 = new LinkedStack<Item>();LinkedStack<Item> stack2 = new LinkedStack<Item>();public void enqueue(Item val) {stack1.push(val);}public Item dequeue() {if (stack2.isEmpty()) {while (!stack1.isEmpty()) {stack2.push(stack1.pop());}}return stack2.pop();}public boolean isEmpty() {return stack1.isEmpty() && stack2.isEmpty();}}// QueueByOneStack queu1 = new QueueByOneStack();//QueueByTwoStack queu1 = new QueueByTwoStack();QueueByThreeStack queu1 = new QueueByThreeStack();public void enqueue(Item val) {queu1.enqueue(val);}public Item dequeue() throws Exception {return queu1.dequeue();}class QueueByThreeStack {LinkedStack<Object> stack1 = new LinkedStack<Object>();LinkedStack<Object> stack2 = stack1;LinkedStack<Object> stack3 = null;public void enqueue(Item key) {stack3 = new LinkedStack<Object>();stack3.push(key);stack2.push(stack3);stack3 = new LinkedStack<Object>();stack2.push(stack3);stack2 = stack3;}public Item dequeue() {stack3 = (LinkedStack<Object>) stack1.pop();stack1 = (LinkedStack<Object>) stack1.pop();Item ky = (Item) stack1.pop();stack1 = stack3;return ky;}}public static void main(String[] args) throws Exception {QueuePowerdByStack<Integer> queue = new QueuePowerdByStack<Integer>();queue.enqueue(12);queue.enqueue(13);queue.enqueue(14);System.out.println(queue.dequeue());System.out.println(queue.dequeue());queue.enqueue(15);queue.enqueue(16);System.out.println(queue.dequeue());queue.enqueue(17);System.out.println(queue.dequeue());queue.enqueue(18);System.out.println(queue.dequeue());System.out.println(queue.dequeue());}}
0 0
- queue by one stack、two stack and three stack
- stack and queue
- Queue and Stack
- Queue and stack
- Stack and Queue
- List, Queue and Stack
- Stack and Queue
- Two stack in one array
- stack,queue
- Queue\Stack
- queue stack
- Stack&Queue
- stack&queue
- stack/queue
- Stack && Queue
- usage of stack and queue
- Smashing the Stack for Fun and Profit by Aleph One
- LeetCode[Stack]----Min Stack&Stack&Queue
- Android最佳的开源库(四)
- Android6.0关于预置三方app卸载(二) 调用接口安装
- window10 pl2303驱动解决
- 系统集成项目管理工程师---信息化知识
- [Anaconda2]Selenium+PhantomJS环境搭建
- queue by one stack、two stack and three stack
- dubbo的轮询机制说明
- 卷积RBM源码解读
- 关于分布式系统的数据一致性问题(三)
- 比特币论文:一个点对点的电子现金系统
- ]跟波澜死磕Swift3基础篇②-Swift开发环境-第一节
- bootstrap-datetimepicker详情的API
- Java学习笔记-多线程
- Android Studio中将一个android工程打成.aar包或者jar包