Java实现堆栈(Stack)
编程题目: 请用Java实现堆栈(Stack)
堆栈实现的三种方式:
(1)通过数组实现一个堆栈;
(2)通过集合实现一个堆栈;
(3)通过两个队列实现一个堆栈。
示例代码:
(1)通过数组实现一个堆栈:
package program.stack.arrayImpl;/**
* 1.使用数组实现堆栈功能,使用int数组保存数据特点:先进后出,后进先出
*/public class StackTest1 { public static void main(String[] args){ //测试堆栈System.out.println("1.数组实现一个堆栈:");Stack stack = new Stack(); stack.push(1);stack.push(2);stack.push(3);stack.push(4);System.out.println(stack.pop());System.out.println(stack.pop());stack.push(5);System.out.println(stack.pop());System.out.println(stack.pop());System.out.println(stack.pop());}
} //使用数组定义一个堆栈
class Stack { int[] a = new int[5]; int i = 0; //数组下标//入栈 public void push(int n){ a[++i] = n; } //出栈public int pop(){ if(i>0){ return a[i--]; }return -1; } }
(2)通过集合实现一个堆栈:
package program.stack.listImpl;import java.util.*;/**
* 2.使用集合实现堆栈功能,使用int数组保存数据特点:先进后出,后进先出
*/public class StackTest2 { public static void main(String[] args){ //测试堆栈System.out.println("2.集合实现一个堆栈:");Stack stack = new Stack(); stack.push(1);stack.push(2);stack.push(3);stack.push(4);System.out.println(stack.pop());System.out.println(stack.pop());stack.push(5);System.out.println(stack.pop());System.out.println(stack.pop());System.out.println(stack.pop());}
} //使用集合定义一个堆栈
class Stack { List<Integer> list = new ArrayList<Integer>(); int index = 0; //下标 //入栈public void push(int n){ list.add(n); index++; } //出栈public int pop(){ if(!list.isEmpty()){ index--; return list.remove(index); } return -1; }
}
(3)通过两个队列实现一个堆栈:
package program.stack.twoQueueImpl;import java.util.ArrayDeque;
import java.util.Queue;/*** 3.两个队列实现一个堆栈* 1.原理分析:* 栈的主要操作有两个:入栈操作和出栈操作,出栈时从栈顶出,入栈是从栈顶插入。* 入栈和入队类似,都是从“所有元素后面插入”;而最关键的问题是出栈操作,要出栈的是的栈顶元素,* 而队列每次出队的是队列的第一个元素。因此我们可以这样,出队的时候,若队列不止一个元素,则进行出队 操作,* 只保留最后一个元素,这样出队的时候,就符合出栈的要求了,但其他的元素必须 保留,而且顺序不能乱,* 这时候另一个队列就起作用了,这个队列可以在“出栈”操作之前按顺序保留所有的元素,等到“出栈”之后,* 把所有元素按顺序进入到“出栈”后的队列。因此两个队列总有一个为空。** 2.总结操作就是:* 入栈:将元素进队列A* 出栈:判断队列A中元素的个数是否为1,如果等于1,则出队列,否则将队列A中的元素 以此出队列并放入队列B,* 直到队列A中的元素留下一个,然后队列A出队列,再把 队列B中的元素出队列以此放入队列A中。**/
public class StackTest3 {public static void main(String[] args) {System.out.println("3.两个队列实现一个堆栈:");Stack stack = new Stack();stack.push(1);stack.push(2);stack.push(3);stack.push(4);System.out.println(stack.pop());System.out.println(stack.pop());stack.push(5);System.out.println(stack.pop());System.out.println(stack.pop());System.out.println(stack.pop()); }}
//两个队列实现一个堆栈
class Stack {Queue<Integer> queueA = new ArrayDeque<Integer>();Queue<Integer> queueB = new ArrayDeque<Integer>();//入栈public void push(int n){queueA.add(n);}//出栈public int pop(){//如果queueA为空,queueB有元素, 将queueB的元素依次放入queueA中,直到最后一个元素,我们弹出。if(queueA.isEmpty()){while (queueB.size() > 1) {queueA.add(queueB.poll());//poll()移出并返回队列的头元素,如果队列为空,则返回null}return queueB.poll();}if(queueB.isEmpty()){while (queueA.size() > 1) {queueB.add(queueA.poll());}return queueA.poll();}return -1;}
}
结果显示:
版权声明:本文为CSDN博主「云魄」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/jsc123581/article/details/81986830
Java实现堆栈(Stack)相关推荐
- java中堆栈(stack)和堆(heap)
http://www.ej38.com/showinfo/java-172156.html 堆栈是一种先进后出的数据结构,只能在一端进行输入或输出数据的操作 Stack类在java.util包中 向 ...
- java 递归 堆栈_Java中的堆栈安全递归
java 递归 堆栈 在本文中,摘自< Java中的函数编程 >一书,我解释了如何使用递归,同时避免了StackOverflow异常的风险. Corecursion正在使用第一步的输出作为 ...
- java中堆栈内存_Java堆空间与堆栈– Java中的内存分配
java中堆栈内存 Sometime back I wrote a couple of posts about Java Garbage Collection and Java is Pass by ...
- java实现堆栈_Java实现一个简单的堆栈
堆栈(Stack)是一种常见的数据结构,符合后进先出(First In Last Out)原则,通常用于实现对象存放顺序的逆序.栈的基本操作有push(添加到堆栈),pop(从堆栈删除),peek(检 ...
- Java堆栈功能_【ThinkingInJava】35、用java实现堆栈功能
/** * 书本:<Thinking In Java> * 功能:用java实现堆栈功能 * 文件:LinkedStack.java * 时间:2015年4月17日14:23:34 * 作 ...
- 写给大忙人的ELK最新版6.2.4学习笔记-Logstash和Filebeat解析(java异常堆栈下多行日志配置支持)...
接前一篇CentOS 7下最新版(6.2.4)ELK+Filebeat+Log4j日志集成环境搭建完整指南,继续对ELK. logstash官方最新文档https://www.elastic.co/g ...
- JAVA中堆栈和内存分配原理
JAVA中堆栈和内存分配原理 1.栈.堆 1.寄存器:最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制. 2. 栈:存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在 ...
- java中的stack类和C++中的stack类的区别
文章目录 1 java中的stack类和C++中的stack类的区别 1.1 java中的stack类 1.2 C++中的stack类 1.3 分析 不经意间想到了这个问题,存到栈中的是对象的引用,还 ...
- C++实现堆栈stack(附完整源码)
C++实现堆栈stack 实现堆栈stack算法的完整源码(定义,实现,main函数测试) 实现堆栈stack算法的完整源码(定义,实现,main函数测试) #ifndef DATA_STRUCTUR ...
- 数据结构C#版笔记--堆栈(Stack)
堆栈(Stack)最明显的特征就是"先进后出",本质上讲堆栈也是一种线性结构,符合线性结构的基本特点:即每个节点有且只有一个前驱节点和一个后续节点. 相对前面学习过的顺序表.链表不 ...
最新文章
- web报表移动端如何进行移动设备绑定与撤销
- 快速撑握C#知识点系列之(struct)结构
- 居住7年未交一分钱天然气使用费 女房主替租户偿还近4万元欠款
- 二十五、深入Java中的static静态修饰符
- MVC安全:ajax表单提交切记加上AntiForgeryToken防止跨站请求伪造 (CSRF)攻击
- C++程序设计:原理与实践(进阶篇)15.6 实例:一个简单的文本编辑器
- 【mongoDB实战】mongoDB数据导入和导出
- android使用百度地图、定位SDK实现地图和定位功能!(最新、可用+吐槽)
- 基于ssm的城市公交查询系统的设计与实现(附源码)
- [整理]WebUploader + SpringMVC 实现多文件断点续传之一 多文件上传
- 原生html5时间组件,amazeui时间组件的实现示例
- 最大值减最小值等于区间长度_一文帮你弄清楚电压和电流的有效值、瞬时值、平均值、最大值及其关系...
- lbs云 java_百度 LBS 云使用介绍
- mybatis mysql 关于调用存储过程获取查询结果
- linux将php停了,Linux停PHP环境的搭建
- python中numpy模块下的np.clip()的用法
- 物质的折射率和光的折射率的关系
- 软件测评概要总结-中科软测认证中心
- 上顿号符号_在电脑上打标点符号,顿号怎样打出来?
- 畅玩《七雄争霸》经典战国策略游戏