一、基本介绍

概念

:(后进先出)

一种特殊的线性表,其只允许在固定的一端进行插入和删除元素操作。进行数据插入和删除操作的一端称为栈顶,另一端称为栈底。栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。

入栈

栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。

出栈

栈的删除操作叫做出栈。出数据在栈顶。

二、java栈的基本方法

向栈中存放元素:stack.push();
获取栈顶元素:stack.peek();
删除栈顶元素:stack.pop();

代码如下(示例):

public static void main(String[] args) {// TODO Auto-generated method stubStack<Integer> stack = new Stack<>();// 创建一个栈stack.push(1);// 向栈中存放元素stack.push(2);stack.push(3);System.out.println(stack.peek()); // 获取栈顶元素 但是删除 结果为3System.out.println(stack.pop()); // 弹出栈顶元素 删除 结果为3System.out.println(stack.empty());// 判断栈中元素是否为空System.out.println(stack.isEmpty());// 判断是否为空}

三、自己实现栈的基本操作

1.开辟一个栈空间
2.存入元素判断是否栈满,满了进行扩容,没满将数据存入数组最后的位置
3.删除栈顶元素判断栈是否为空

public class MyStack {public int[] arr;// 开辟一个栈的空间public int arrSize;// 栈实际用的长度public MyStack() {this.arr = new int[10];// 设置栈的空间为10个元素的空间}// 栈中存放元素要判断栈是否为满public boolean isFull() {// 数据个数=长度if (this.arrSize == this.arr.length) {return true;}return false;}public void push(int item) {// 如果栈满,扩容if (isFull()) {this.arr = Arrays.copyOf(this.arr, 3 * arr.length);}// 没满,存放到数组的最后位置this.arr[this.arrSize] = item;this.arrSize++;}// pop删除栈顶元素要判断栈是否为空public boolean empty() {// 数据个数为空时return this.arrSize == 0;}public int pop() throws RuntimeException {if (empty()) {throw new RuntimeException("栈空");}int val = this.arr[this.arrSize - 1];this.arrSize--;return val;}// 获取栈顶元素public int peek() {if (empty()) {throw new RuntimeException("栈空");}return this.arr[this.arrSize - 1];}public static void main(String[] args) {// TODO Auto-generated method stubMyStack myStack = new MyStack();System.out.println(myStack.arrSize);// 栈实际长度System.out.println(myStack.arr.length);// 数组长度myStack.push(1);myStack.push(2);myStack.push(3);System.out.println(myStack.peek());// 获取栈顶元素 但是不删除 结果为3System.out.println(myStack.pop());// 弹出栈顶元素 删除 结果为3System.out.println(myStack.peek());// 获取栈顶元素 但是不删除 结果为2System.out.println(myStack.empty());// 结果为falseSystem.out.println(myStack.pop());// 2System.out.println(myStack.pop());// 1System.out.println(myStack.pop());// 证明为空报异常}}

Java-栈的基本操作相关推荐

  1. Java - 栈(Stack)的特点 与 栈的基本操作

    一.栈的特点 其实我们计算机科学中,一种思想是"先进后出的思想".在很多算法或应用中,需要用到"先进后出或者是后进先出 的思想",我们可以考虑用栈来实现. ab ...

  2. 【Java】轻松掌握栈的基本操作

    轻松掌握栈的基本操作 1.栈的基本概念 2.栈的实现 3.栈常见的算法题目 1.栈的基本概念 如何理解栈 对于栈,首先列举一个生活案例,家里的厨房通常都放有很多盘子.每次洗好的盘子总是堆叠在一起,如图 ...

  3. Java实现栈的入栈和出栈等基本操作

    栈的英文为(stack) 栈是一个先入后出(FILO-First In Last Out)的有序列表. 栈(stack)是限制线性表中元素的插入和删除只能在线性表的同一端进行的一种特殊线性表.允许插入 ...

  4. java栈和队列验证回文串_栈和队列的基本操作及其应用(回文判断)

    实验二栈和队列的基本操作及其应用 一.实验目的 1.掌握栈和队列的顺序存储结构和链式存储结构,以便在实际中灵活应用. 2.掌握栈和队列的特点,即后进先出和先进先出的原则. 3.掌握栈和队列的基本运算, ...

  5. java顺序栈_顺序栈的基本操作(入栈和出栈)

    顺序栈的基本操作(入栈和出栈) 顺序栈,即用顺序表实现栈存储结构.通过前面的学习我们知道,使用栈存储结构操作数据元素必须遵守 "先进后出" 的原则,本节就 "如何使用顺序 ...

  6. java 栈 先进后出_数据结构: 先进后出——堆栈

    栈是一种常用的数据结构,在生活中经常遇到这样的例子,如铁路调度站.本节将详细介绍堆栈的实现过程. 算法点拨(顺序栈) 栈是一种重要的数据结构.从数据结构的角度看,栈也是线性表,其特殊性在于栈的基本操作 ...

  7. java 栈队列区别是什么意思_java栈和队列的区别

    Java中用LinkedList实现栈和队列_IT/计算机_专业资料.笔记摘录 栈和队列是两种特殊的线性表,它们的逻辑结构和线性表相同,只是其运算规则 较线性表有更多的限制,故...... 闽江学院电 ...

  8. 栈:栈的基本操作总结

    栈的基本操作总结 一.什么是栈 二.栈的应用场景 三.对栈的一些具体操作 四.代码实现 一.什么是栈 栈的英文为(stack) 栈是一个先入后出(FILO-First In Last Out)的有序列 ...

  9. 入栈和出栈的基本操作

    入栈和出栈的基本操作,输入-1表示出栈,否则入栈,出栈若失败输出error并退出本轮循环. 输入样例: 5 1 2 -1 -1 1 5 1 -1 -1 2 2 0输出样例: 2 1 1 error C ...

  10. java栈和堆的区别_java 栈 和 堆 的区别

    转载: 一.java栈 Java 栈总是和线程关联在一起,每当创建一个线程时,JVM就会为这个线程创建一个对应的Java栈,在这个Java栈中又会含有多个栈(Frames),这些栈帧是与每个方法关联起 ...

最新文章

  1. apue第四章习题的一些拙见(不定时更新)
  2. linux下使profile和.bash_profile立即生效的方法
  3. SAP BMBC报表不能显示批次分类视图里的特性值
  4. Linux无盘教程,如何无盘启动Linux
  5. 世界各国钱币(ZT)
  6. php 正则 前望,PHP 正则表达式
  7. php ajax 删除行,php – 使用jQuery Ajax删除mySQL表行
  8. Qt5.2 for Android 配置及部署到手机运行
  9. pythonsys标准_python 以标准输出(sys.stdout)为例,看python的标准输入、标准错误输出...
  10. 多些时间能少写些代码
  11. MySQL replication illegal mix of collations
  12. 华硕X370 Pro更新BIOS后黑屏自救记录
  13. php网页无法显示图片,XP系统中,网页图片无法显示怎么解决?
  14. hadoop 起动是的时候报错 localhost: Could not create the Java virtual machine._far beyond me,thks~~_百度空间...
  15. 微信小程序信息授权获取(头像,昵称,等)
  16. HDU 5976 Detachment(拆分)
  17. ec,easyclick常用函数大全,集合1
  18. 第24篇-极某壁纸结果参数分析
  19. 解决addClass不起作用的小妙招
  20. k8s利用deployment部署pod,以及应用更新和回滚操作

热门文章

  1. CSS分割线虚线代码
  2. Stata结果输出:Excel结果表变身LaTeX表格
  3. 对极限编程四个核心的理解
  4. (n++)+(n++)+(n++)与(++n)+(++n)+(++n)的区别
  5. 抓起整个网站离线浏览的软件Teleport Pro
  6. 谷歌开源!一个格式化 Python 代码的好帮手!
  7. 计算机颜色偏蓝,电脑整个屏幕颜色不正常偏蓝怎么调回正常颜色?
  8. 2017 ACM Arabella Collegiate Programming Contest
  9. 开源托管平台GitHub和git分支
  10. java mail 发送邮件_JavaMail实现收发邮件——(二)发送邮件