【Java】数据结构——栈(图文)
文章目录
- 简介
- 一、【数组实现】栈的顺序存储
- 栈的结构
- 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】数据结构——栈(图文)相关推荐
- Java数据结构 栈中添加辅助栈实现min函数
栈中添加辅助栈实现min函数 class MinStack {Stack<Integer> A, B;public MinStack() {A = new Stack<>(); ...
- java数据结构- - - -栈
栈:是一种容器,类似于桶一样,栈是一种特殊的线性表,不同于一般线性表的是,一般线性表可以在表内任意位置添加和删除元素, 而栈只可以在尾端进行,栈尾一般称之为栈顶,另一端称之为栈底,特点是:后进先出/先 ...
- java数据结构-栈
栈 1.栈的定义 栈(Stack):是只允许在一端进行插入或删除的线性表.首先栈是一种线性表,但限定这种线性表只能在某一端进行插入和删除操作. 栈顶(Top):线性表允许进行插入删除的那一端. 栈底( ...
- Java数据结构——栈(数组实现)
定义数组stack,设置栈的最大值,和标记栈的顶端的数字top=-1,(数组的起始索引为0,所以定义top=-1) 创建构造器,并且初始化容器 判断栈是否为空 如果栈为空,指针指向数组前一个元素,就是 ...
- 8皇后以及N皇后算法探究,回溯算法的JAVA实现,非递归,数据结构“栈”实现
是使用递归方法实现回溯算法的,在第一次使用二维矩阵的情况下,又做了一次改一维的优化 但是算法效率仍然差强人意,因为使用递归函数的缘故 下面提供另一种回溯算法的实现,使用数据结构"栈" ...
- java语言链栈_Java语言实现数据结构栈代码详解
近来复习数据结构,自己动手实现了栈.栈是一种限制插入和删除只能在一个位置上的表.最基本的操作是进栈和出栈,因此,又被叫作"先进后出"表. 首先了解下栈的概念: 栈是限定仅在表头进行 ...
- Java数据结构之栈详解
栈的定义: 栈(stack)是一种用于存储数据的简单数据结构.栈一个有序线性表,只能在表的一端(PS:栈顶)执行插人和删除操作.最后插人的元素将被第一个删除.所以,栈也称为后进先出(Last In F ...
- Java数据结构——数组实现栈
Java数据结构--数组实现栈 public class StackAndQueue {public static void main(String[] args) {Scanner scanner ...
- 【Java数据结构】栈和队列
一. 栈(Stack) 1.概念 2.入栈和出栈的顺序 3.中缀表达式转后缀表达式 4.栈的方法 LeetCode 150. 逆波兰表达式求值 剑指 Offer 31. 栈的压入.弹出序列 5.栈的实 ...
- java数据结构与算法之顺序表与链表深入分析
转载请注明出处(万分感谢!): http://blog.csdn.net/javazejian/article/details/52953190 出自[zejian的博客] 关联文章: java数据结 ...
最新文章
- MySQL5.7 : 对隐式锁转换的优化
- 【Android 逆向】ART 脱壳 ( dex2oat 脱壳 | aosp 中搜索 dex2oat 源码 | dex2oat.cc#main 主函数源码 )
- 网站如何接入微信支付功能?微信支付详细教程它来了(建议收藏)
- 乔恩与加菲猫引发的思考
- 用户体验五要素_UX系列课(三):用户体验影响力金字塔及五大要素
- 据说这是史上最牛逼的可视化神器
- JS对全角与半角的验证,相互转化以及介绍
- IDEA太慢,喵喵要气死了
- 【LeetCode】Remove Nth Node From End of List
- 即插即用!开源项目【云框架】发布“基于Spring cloud的微服务架构”
- Exchange的AutoDiscover服务
- 如何下载谷歌浏览器官方最新离线安装包
- 06-maven的profile和Spring boot 的profile整合
- 今日头条ajax技术内as ,cp,_cp_signature参数分析、破解及python爬取频道数据
- android 粗体字体下载,徐静蕾加粗字体
- Python 计算思维训练——字典与字符串练习
- 创业全攻略:从零到开具第一张发票
- 如何区分寒咳嗽和热咳嗽
- 税控服务器抵扣增值税文件,税控盘费和服务费全额抵税如何做账?
- 读 Dov M. Gabbay 之 Handbook of the History of Logic. Volume 3: The Rise of Modern Logic