文章目录

  • 简介
  • 一、【数组实现】栈的顺序存储
    • 栈的结构
    • 1、入栈
    • 2、出栈
    • 3、判断栈满
    • 4、判断栈空
    • 5、获取栈的长度
    • 6、遍历栈
    • 完整代码
    • 测试

简介

栈是一种先进后出的线性结构。

一、【数组实现】栈的顺序存储

栈的结构

public class ArrayStack {/*** max size of the stack*/private int maxSize;/*** a stack object*/private Object[] stack;/*** init the top of the stack* from 0 to  maxSize */private int top = -1;public ArrayStack(int maxSize) {this.maxSize = maxSize;stack = new Object[this.maxSize];}------functions------
}

1、入栈

思路:

1、首先判断栈是否为满,若满则返回,
2、否则先将top加1,然后给栈数组赋值。

看图说话:

代码:

/*** push a element** @param object*/public void push(Object object) {if (this.isFull()) {System.out.println("the stack is full ! can't push !");return;}stack[++top] = object;}

2、出栈

思路:

1、首先判断栈是否为空,若为空,提示并返回。
2.否则,先保存结点,后top减1。

看图说话:

代码:

/*** pop a element** @return*/public Object pop() {if (isFull()) {throw new RuntimeException("the stack is empty!");}return stack[top--];}

3、判断栈满

代码:

  /*** Whether the stack is full** @return*/public boolean isFull() {return top > this.maxSize - 1;}

4、判断栈空

代码:

/*** Whether the stack is empty** @return*/public boolean isEmpty() {return top == -1;}

5、获取栈的长度

思路:

因为top指针一直指向栈的顶部,所以top的值就是栈的长度,但是由于本案例是从0开始的,所以栈的长度需要加1,即:top+1。

看图说话:

代码:

 /*** get  length of stack* @return*/public int getLength(){return top+1;}

6、遍历栈

代码:

   /*** print a stack*/public void list() {if (isEmpty()) {System.out.println("the stack is empty!");}for (int i = top; i >= 0; i--) {System.out.print("stack[" + i + "]=");System.out.println(stack[i]);}}

完整代码

package com.qingfeng.stack.array;@SuppressWarnings("all")
public class ArrayStack {/*** max size of the stack*/private int maxSize;/*** a stack object*/private Object[] stack;/*** init the top of the stack* from 0 to  maxSize*/private int top = -1;public ArrayStack(int maxSize) {this.maxSize = maxSize;stack = new Object[this.maxSize];}/*** Whether the stack is empty** @return*/public boolean isEmpty() {return top == -1;}/*** Whether the stack is full** @return*/public boolean isFull() {return top > this.maxSize - 1;}/*** push a element** @param object*/public void push(Object object) {if (this.isFull()) {System.out.println("the stack is full ! can't push !");return;}stack[++top] = object;}/*** pop a element** @return*/public Object pop() {if (isFull()) {throw new RuntimeException("the stack is empty!");}return stack[top--];}/*** print a stack*/public void list() {if (isEmpty()) {System.out.println("the stack is empty!");}for (int i = top; i >= 0; i--) {System.out.print("stack[" + i + "]=");System.out.println(stack[i]);}}/*** get  length of stack* @return*/public int getLength(){return top+1;}
}

测试

代码:

public class ArrayStackTest {public static void main(String[] args) {ArrayStack stack = new ArrayStack(5);/*------------------------------------------------------------------*/System.out.println("-----testPush-----");stack.push(10);stack.push(20);stack.push(30);stack.push(80);stack.list();/*------------------------------------------------------------------*/System.out.println("-----testPop-----");stack.pop();stack.list();/*------------------------------------------------------------------*/System.out.println("-----testGetLength-----");System.out.println("the length of stack is: "+stack.getLength());}
}

运行结果:

-----testPush-----
stack[3]=80
stack[2]=30
stack[1]=20
stack[0]=10
-----testPop-----
stack[2]=30
stack[1]=20
stack[0]=10
-----testGetLength-----
the length of stack is: 3Process finished with exit code 0

【Java】数据结构——栈(图文)相关推荐

  1. Java数据结构 栈中添加辅助栈实现min函数

    栈中添加辅助栈实现min函数 class MinStack {Stack<Integer> A, B;public MinStack() {A = new Stack<>(); ...

  2. java数据结构- - - -栈

    栈:是一种容器,类似于桶一样,栈是一种特殊的线性表,不同于一般线性表的是,一般线性表可以在表内任意位置添加和删除元素, 而栈只可以在尾端进行,栈尾一般称之为栈顶,另一端称之为栈底,特点是:后进先出/先 ...

  3. java数据结构-栈

    栈 1.栈的定义 栈(Stack):是只允许在一端进行插入或删除的线性表.首先栈是一种线性表,但限定这种线性表只能在某一端进行插入和删除操作. 栈顶(Top):线性表允许进行插入删除的那一端. 栈底( ...

  4. Java数据结构——栈(数组实现)

    定义数组stack,设置栈的最大值,和标记栈的顶端的数字top=-1,(数组的起始索引为0,所以定义top=-1) 创建构造器,并且初始化容器 判断栈是否为空 如果栈为空,指针指向数组前一个元素,就是 ...

  5. 8皇后以及N皇后算法探究,回溯算法的JAVA实现,非递归,数据结构“栈”实现

    是使用递归方法实现回溯算法的,在第一次使用二维矩阵的情况下,又做了一次改一维的优化 但是算法效率仍然差强人意,因为使用递归函数的缘故 下面提供另一种回溯算法的实现,使用数据结构"栈" ...

  6. java语言链栈_Java语言实现数据结构栈代码详解

    近来复习数据结构,自己动手实现了栈.栈是一种限制插入和删除只能在一个位置上的表.最基本的操作是进栈和出栈,因此,又被叫作"先进后出"表. 首先了解下栈的概念: 栈是限定仅在表头进行 ...

  7. Java数据结构之栈详解

    栈的定义: 栈(stack)是一种用于存储数据的简单数据结构.栈一个有序线性表,只能在表的一端(PS:栈顶)执行插人和删除操作.最后插人的元素将被第一个删除.所以,栈也称为后进先出(Last In F ...

  8. Java数据结构——数组实现栈

    Java数据结构--数组实现栈 public class StackAndQueue {public static void main(String[] args) {Scanner scanner ...

  9. 【Java数据结构】栈和队列

    一. 栈(Stack) 1.概念 2.入栈和出栈的顺序 3.中缀表达式转后缀表达式 4.栈的方法 LeetCode 150. 逆波兰表达式求值 剑指 Offer 31. 栈的压入.弹出序列 5.栈的实 ...

  10. java数据结构与算法之顺序表与链表深入分析

    转载请注明出处(万分感谢!): http://blog.csdn.net/javazejian/article/details/52953190 出自[zejian的博客] 关联文章: java数据结 ...

最新文章

  1. MySQL5.7 : 对隐式锁转换的优化
  2. 【Android 逆向】ART 脱壳 ( dex2oat 脱壳 | aosp 中搜索 dex2oat 源码 | dex2oat.cc#main 主函数源码 )
  3. 网站如何接入微信支付功能?微信支付详细教程它来了(建议收藏)
  4. 乔恩与加菲猫引发的思考
  5. 用户体验五要素_UX系列课(三):用户体验影响力金字塔及五大要素
  6. 据说这是史上最牛逼的可视化神器
  7. JS对全角与半角的验证,相互转化以及介绍
  8. IDEA太慢,喵喵要气死了
  9. 【LeetCode】Remove Nth Node From End of List
  10. 即插即用!开源项目【云框架】发布“基于Spring cloud的微服务架构”
  11. Exchange的AutoDiscover服务
  12. 如何下载谷歌浏览器官方最新离线安装包
  13. 06-maven的profile和Spring boot 的profile整合
  14. 今日头条ajax技术内as ,cp,_cp_signature参数分析、破解及python爬取频道数据
  15. android 粗体字体下载,徐静蕾加粗字体
  16. Python 计算思维训练——字典与字符串练习
  17. 创业全攻略:从零到开具第一张发票
  18. 如何区分寒咳嗽和热咳嗽
  19. 税控服务器抵扣增值税文件,税控盘费和服务费全额抵税如何做账?
  20. 读 Dov M. Gabbay 之 Handbook of the History of Logic. Volume 3: The Rise of Modern Logic

热门文章

  1. opencv常用函数
  2. python文件操作以及相对路径和绝对路径问题
  3. 开源微服务编排框架:Netflix Conductor
  4. 「技术人生」专题第1篇:什么是技术一号位?
  5. 2020双11,阿里巴巴集团数万数据库系统全面上云揭秘
  6. 掌门教育微服务体系Solar第3弹:Nacos企业级落地下篇
  7. 如何使用MaxCompute Spark读写阿里云Hbase
  8. MaxCompute规格详解 让您花更低的成本获得更高的业务价值
  9. 首次曝光 | 阿里数万名开发者都在使用的数据库开发工具到底长什么样?
  10. 每秒7亿次请求,阿里新一代数据库如何支撑?