用栈实现队列与用队列实现栈
一.用栈实现队列
用栈实现队列的思路是用两个栈,只是在出队的时候,将第一个栈中的元素移动到另一个栈中,在从第二个栈中出栈就可以了.
import java.util.Stack;public class MyQueue {/*你只能使用标准的栈操作 —— 也就是只有 push to top, peek/pop from top, size, 和 is empty 操作是合法的。*/private final Stack<Integer> stack1;private final Stack<Integer> stack2;public MyQueue() {stack1 = new Stack<>();stack2= new Stack<>();}public void push(int x) {stack1.push(x);}public int pop() {if(stack2.isEmpty()){moveS1toS2();}return stack2.pop();}public int peek() {if(stack2.isEmpty()){moveS1toS2();}return stack2.peek();}private void moveS1toS2(){while (!stack1.isEmpty()){stack2.push(stack1.pop());}}public boolean empty() {return stack1.empty() && stack2.empty();}
}
二.用一个队列实现栈
用一个queue来存储数据,用一个值来存储栈顶元素.在出栈时,需要把n-2个元素重新出栈,然后加入队列,剩下两个元素,一个作为栈顶,一个作为方法返回.
import java.util.LinkedList;
import java.util.Queue;public class MyStack {/*你只能使用队列的基本操作 —— 也就是 push to back、peek/pop from front、size 和 is empty 这些操作。*/private Queue<Integer> queue ;private int top=0;public MyStack() {queue = new LinkedList<>();}public void push(int x) {queue.offer(x);top = x;}public int pop() {int n=queue.size();while (n>2){queue.offer(queue.poll());n--;}top = queue.peek();queue.offer(queue.poll());return queue.poll();}public int top() {return top;}public boolean empty() {return queue.isEmpty();}}
用栈实现队列与用队列实现栈相关推荐
- 在java的实现栈的插入数据_Java实现数据结构栈stack和队列Queue
回顾JDK提供的集合类 容器(集合)框架如下: 集合类存放于java.util包中.集合类存放的都是对象的引用,而非对象本身. 集合类型主要有3种:set(集).list(列表)和map(映射). C ...
- JAVA实现用两个栈来实现一个队列,完成队列的Push和Pop操作(《剑指offer》)
最近在刷<剑指offer>里的编程题,但是网上关于<剑指offer>的解答多半是C或者C++的,而且官方(作者)也是在用C++进行讲解,这里自己用java写了一些题目的解答代码 ...
- 用栈实现队列和用队列实现栈
首先需要使用上篇文章(用数组实现栈和队列)中的栈和队列两个类 1.栈实现队列:思路是有两个栈,一个用来放数据(数据栈),一个用来辅助(辅助栈).数据添加时,会依次压人栈,取数据时肯定会取栈顶元素,但我 ...
- 用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。...
题目描述 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. import java.util.Stack; public class Solution { ...
- 算法:用两个栈来实现一个队列,完成队列的Push和Pop操作。 队列中的元素为int类型。...
算法:用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型.<剑指offer> 利用栈来进行操作,代码注释写的比较清楚:首先判断两个栈是否是空的:其次当栈二 ...
- 栈和队列之用2个栈实现一个队列
import java.util.Stack;/*** @author chenyu* 题目:编写一个类,用2个栈实现一个队列,支持队列的基本操作(add poll peek)* 思路:栈的特点是先进 ...
- java 栈 队列 接口_Java队列接口
java 栈 队列 接口 介绍: 队列是FIFO(先进先出)抽象数据类型(ADT). 换句话说,按插入顺序将元素删除. java.util.Queue是Java 中的接口,并且从java.util.C ...
- 复习栈和队列,详解最小栈,栈的弹出压入序列,逆波兰表达式求值
栈和队列的概念 栈:吃进去吐出来 对列:吃进去拉出来 数据结构中的栈和内存中的区别 数据结构中的栈具有后进先出的特性,而内存中的栈是一个内存空间,只不过这个内存空间具与数据结构的栈具有相同的特性. 栈 ...
- 两个栈实现一个队列/两个队列实现一个栈
http://blog.csdn.net/sinat_30472685/article/details/70157227 1两个栈实现一个队列 1.原理分析: 队列的主要操作有两个:入队操作和出队操作 ...
- 计算机二级循环队列知识点,考点!计算机二级考试公共基础知识冲刺复习笔记:栈、队列和循环队列...
小编所收集到的相关计算机二级考试公共基础知识冲刺复习笔记:栈.队列和循环队列的资料 大家要认真阅读哦! 1.栈(Stack)又称堆栈. (1)栈是一种运算受限的线性表,其限制是仅允许在表的一端进行插入 ...
最新文章
- 使用nmap-converter将nmap扫描结果XML转化为XLS实战
- python语言入门w-Python 基础教程
- 键盘工具栏的快速集成--IQKeyboardManager
- Linux中对文件描述符的操作(FD_ZERO、FD_SET、FD_CLR、FD_ISSET
- 计算机相关专业的自我评价,计算机相关专业的学生自我评价
- 【经典】MIT人工智能实验室: 如何做研究?
- !/usr/bin/env python和!/usr/bin/python的区别
- Struts2接收前端页面数据的方式
- php while次数,PHP While 循环
- 百度换肤功能实现(vue)
- 【修订总结】【五万字深度洞察】毒舌阿朱最看好的企业服务商
- 【Pyecharts50例】添加背景图片/Logo
- php属相对应年份博客,生肖年份的起点
- 图文并茂,动手操作一台宝马X7仪表里程校调,看看你买的二手 “新” 宝马是怎么调出来的!
- 在日本名古屋举行的AACSB亚太地区年会将WRDS-SSRN创新奖颁发给南京大学
- 这位印度小哥,拯救了山河日下的微软帝国
- 麻雀要革命2 第44节:怦然心动的星月童话
- yarn和npm常用基本命令安装和卸载
- c++ 结构体和vector进行lower_bound和upper_bound
- Elasticsearch 6.4 ingest-attachment对文件IK分词器全文检索
热门文章
- 【Github上有趣的项目】TensorKart 自动驾驶马里奥赛车(玩不了)
- 睡觉时憋气发出“嗯嗯”的声音?
- python opencv cv.waitKey(1) 0xFF 的作用
- python 计时器 timeit 报错 NameError: name 'xxx' is not defined
- python 如何巧妙利用 pypi 官网进行个人包管理(244)
- HTML---百度新闻轮播图--定位练习
- qpid java_AMQP与QPID简介
- LeetCode14 最长公共前缀
- mysql数据库连接池_MySql数据库连接池
- vue人员轨迹_在vue中高德地图引入和轨迹的绘制的实现