编程题目: 请用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)相关推荐

  1. java中堆栈(stack)和堆(heap)

    http://www.ej38.com/showinfo/java-172156.html 堆栈是一种先进后出的数据结构,只能在一端进行输入或输出数据的操作  Stack类在java.util包中 向 ...

  2. java 递归 堆栈_Java中的堆栈安全递归

    java 递归 堆栈 在本文中,摘自< Java中的函数编程 >一书,我解释了如何使用递归,同时避免了StackOverflow异常的风险. Corecursion正在使用第一步的输出作为 ...

  3. java中堆栈内存_Java堆空间与堆栈– Java中的内存分配

    java中堆栈内存 Sometime back I wrote a couple of posts about Java Garbage Collection and Java is Pass by ...

  4. java实现堆栈_Java实现一个简单的堆栈

    堆栈(Stack)是一种常见的数据结构,符合后进先出(First In Last Out)原则,通常用于实现对象存放顺序的逆序.栈的基本操作有push(添加到堆栈),pop(从堆栈删除),peek(检 ...

  5. Java堆栈功能_【ThinkingInJava】35、用java实现堆栈功能

    /** * 书本:<Thinking In Java> * 功能:用java实现堆栈功能 * 文件:LinkedStack.java * 时间:2015年4月17日14:23:34 * 作 ...

  6. 写给大忙人的ELK最新版6.2.4学习笔记-Logstash和Filebeat解析(java异常堆栈下多行日志配置支持)...

    接前一篇CentOS 7下最新版(6.2.4)ELK+Filebeat+Log4j日志集成环境搭建完整指南,继续对ELK. logstash官方最新文档https://www.elastic.co/g ...

  7. JAVA中堆栈和内存分配原理

    JAVA中堆栈和内存分配原理 1.栈.堆 1.寄存器:最快的存储区, 由编译器根据需求进行分配,我们在程序中无法控制. 2. 栈:存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在 ...

  8. java中的stack类和C++中的stack类的区别

    文章目录 1 java中的stack类和C++中的stack类的区别 1.1 java中的stack类 1.2 C++中的stack类 1.3 分析 不经意间想到了这个问题,存到栈中的是对象的引用,还 ...

  9. C++实现堆栈stack(附完整源码)

    C++实现堆栈stack 实现堆栈stack算法的完整源码(定义,实现,main函数测试) 实现堆栈stack算法的完整源码(定义,实现,main函数测试) #ifndef DATA_STRUCTUR ...

  10. 数据结构C#版笔记--堆栈(Stack)

    堆栈(Stack)最明显的特征就是"先进后出",本质上讲堆栈也是一种线性结构,符合线性结构的基本特点:即每个节点有且只有一个前驱节点和一个后续节点. 相对前面学习过的顺序表.链表不 ...

最新文章

  1. web报表移动端如何进行移动设备绑定与撤销
  2. 快速撑握C#知识点系列之(struct)结构
  3. 居住7年未交一分钱天然气使用费 女房主替租户偿还近4万元欠款
  4. 二十五、深入Java中的static静态修饰符
  5. MVC安全:ajax表单提交切记加上AntiForgeryToken防止跨站请求伪造 (CSRF)攻击
  6. C++程序设计:原理与实践(进阶篇)15.6 实例:一个简单的文本编辑器
  7. 【mongoDB实战】mongoDB数据导入和导出
  8. android使用百度地图、定位SDK实现地图和定位功能!(最新、可用+吐槽)
  9. 基于ssm的城市公交查询系统的设计与实现(附源码)
  10. [整理]WebUploader + SpringMVC 实现多文件断点续传之一 多文件上传
  11. 原生html5时间组件,amazeui时间组件的实现示例
  12. 最大值减最小值等于区间长度_一文帮你弄清楚电压和电流的有效值、瞬时值、平均值、最大值及其关系...
  13. lbs云 java_百度 LBS 云使用介绍
  14. mybatis mysql 关于调用存储过程获取查询结果
  15. linux将php停了,Linux停PHP环境的搭建
  16. python中numpy模块下的np.clip()的用法
  17. 物质的折射率和光的折射率的关系
  18. 软件测评概要总结-中科软测认证中心
  19. 上顿号符号_在电脑上打标点符号,顿号怎样打出来?
  20. 畅玩《七雄争霸》经典战国策略游戏

热门文章

  1. 华为云计算IE面试笔记-Fusionsphere架构及组件介绍(服务器虚拟化解决方案)
  2. 自定义 Bean 作用域
  3. matlab如何计算方差分析,matlab-方差分析.ppt
  4. 《C陷阱与缺陷》读书笔记
  5. 六自由度机械臂参数化设计
  6. 物流车笔记——编码器原理
  7. linux环境下 Redis 配置文件
  8. ssd网络结构_SSD的理解
  9. Java中类与对象的关系与区别
  10. 如何通过搜索计算机共享打印机驱动程序,怎么解决连接共享打印机时“找不到驱动程序”...