一、分析

  栈是限定仅在表的一端进行插入或删除操作的线性表,对于栈来说,操作端称为栈顶,另一端则称为栈底,栈的修改是按照后进先出的原则进行的,因此又称为后进先出的线性表。

  顺序栈是指利用顺序存储结构实现的栈,即利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素,同时附设指针top指示栈顶元素在顺序栈中的位置。

  一个标准的顺序栈具有如下基本操作:

    1、初始化顺序栈

    2、销毁顺序栈

    3、清空顺序栈

    4、检测顺序栈是否为空

    5、返回顺序栈中的元素个数

    6、返回顺序栈的栈顶元素,不修改栈顶指针

    7、向顺序栈顶中压入元素

    8、从顺序栈顶中弹出元素

    9、从栈底到栈顶遍历顺序栈

  在Java中,可以将整个顺序栈定义成一个类,类中定义有一个数组类型的属性表示顺序存储结构来存储元素,再定义一个int类型的属性top来作为指针指示栈顶元素在数组中的位置,顺序栈的基本操作则定义成类的方法。初始化顺序栈即实例化类,销毁顺序栈即销毁实例化出来的对象。

二、实现

1、定义类属性和构造函数

 class InitStack{

     private int [] stack = null;      //存储元素

     private int top = 0;           //指示栈顶元素在顺序栈中的位置

     public InitStack(int max) {       //初始化自定义大小的顺序栈
this.stack = new int[max];
}
}

2、清空顺序栈

 public void clearStack() {
this.top = 0;         //直接令栈顶指针指向栈底即可
}

3、检测顺序栈是否为空

 public boolean stackEmpty() {
if(this.top == 0) {       //检测栈顶指针是否指向栈底即可
return true;
}else {
return false;
}
}

4、返回顺序栈中的元素个数

 public int stackLength() {
return this.top;       //栈顶指针的值即代表了元素个数
}

5、返回顺序栈的栈顶元素,不修改栈顶指针

 public int [] getTop() {

     if (this.top == 0) {        //如果顺序栈为空,则返回空
return null;
} int [] i = new int[1];
i[0] = stack[this.top - 1];   //获取栈顶元素 return i;
}

6、向顺序栈顶中压入元素

 public boolean push(int value) {

     if(this.top == this.stack.length) {    //判断顺序栈是否已满
return false;
} this.stack[this.top] = value;       //压入元素
this.top++;                 //栈顶指针加一
return true;
}

7、从顺序栈顶中弹出元素

 public int [] pop() {

     if (this.top == 0) {      //判断顺序栈是否已空
return null;
} int [] i = new int[1];
this.top--;           //栈顶指针减一
i[0] = stack[this.top];   //获取栈顶元素
return i;
}

8、从栈底到栈顶遍历顺序栈

 public String stackTraverse() {            //通过输出顺序栈元素来表示遍历

     String s = "";                    //存储要输出的元素

     for (int i = 0; i < this.top; i++) {      //循环遍历
s += this.stack[i] + "、";
} if(s.length() == 0) {              //如果未获取到元素,返回空字符串
return s;
} return s.substring(0,s.length() - 1);    //除去最后一个顿号后返回
}

三、小结

  以上就是顺序栈用Java的实现,由于只定义了整数的数组,因此只能操作整数数据,但顺序栈的基本思想都已实现。

数据结构——Java实现顺序栈的更多相关文章

  1. 数据结构:C_顺序栈的实现

    数据结构顺序栈的实现(C语言版) 1.写在前面 栈是一种遵循元素先进(Push)后出(Pop)规则的线性表,它的实现可以用数组或者链表. ..... 2.代码分解 2.1对栈的结构定义: typede ...

  2. Java的顺序栈和链式栈

    栈的定义 栈是限制在表的一段进行插入和删除的运算的线性表,通常能够将插入.删除的一端为栈顶,例外一端称为栈底,当表中没有任何元素的时候称为空栈. 通常删除(又称"退栈")叫做弹出p ...

  3. TOJ 数据结构实验--静态顺序栈

    描述 创建一个顺序栈(静态),栈大小为5.能够完成栈的初始化.入栈.出栈.获取栈顶元素.销毁栈等操作. 顺序栈类型定义如下: typedef struct {  int data[Max];    i ...

  4. TZOJ 数据结构实验--静态顺序栈

    描述 创建一个顺序栈(静态),栈大小为5.能够完成栈的初始化.入栈.出栈.获取栈顶元素.销毁栈等操作. 顺序栈类型定义如下: typedef struct {  int data[Max];    i ...

  5. 数据结构——Java实现链栈

    一.分析 栈是限定仅在表的一端进行插入或删除操作的线性表,对于栈来说,操作端称为栈顶,另一端则称为栈底,栈的修改是按照后进先出的原则进行的,因此又称为后进先出的线性表. 链栈是指采用链式存储结构实现的 ...

  6. 数据结构——Java实现顺序表

    一.分析 什么是顺序表?顺序表是指用一组地址连续的存储单元依次存储各个元素,使得在逻辑结构上相邻的数据元素存储在相邻的物理存储单元中的线性表.一个标准的顺序表需要实现以下基本操作: 1.初始化顺序表 ...

  7. java实现顺序栈

    public class MyStack{ Object[] data; int top; int maxSize; public MyStack(int maxSize) { this.maxSiz ...

  8. java实现顺序表、链表、栈 (x)->{持续更新}

    1.java实现节点 /** * 节点 * @luminous-xin * @param <T> */ public class Node<T> { T data; Node& ...

  9. 数据结构Java实现05----栈:顺序栈和链式堆栈

    一.堆栈的基本概念: 堆栈(也简称作栈)是一种特殊的线性表,堆栈的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置进行插入和删除操作,而堆栈只允许在固定一端进行插入和删除 ...

随机推荐

  1. MYSQL——解题查询语句答题思路,再难的查询都不怕!

    select查询语句,作为测试人员,使用此语句是家常便饭,是必须掌握的部分,由开始学习mysql到网上搜索试题做,开始做题一塌糊涂,拿到题目就晕,无从下手,现在慢慢总结了一套自己做题的方式,很开森,嘿 ...

  2. 加密算法:DigestUtils与java MessageDigest

    1.使用Spring的DigestUtils public class StringUtilTest { static final String TARGET = "changeme&quo ...

  3. 前端笔记之Canvas

    一.Canvas基本使用 Canvas是HTML5的画布,Canvas算是“不务正业”的面向对象大总结,将面向对象玩极致. 算法为王!就是说canvas你不会,但是算法好,不怕写业务,不怕代码量,只要 ...

  4. Caffe源码理解3:Layer基类与template method设计模式

    目录 写在前面 template method设计模式 Layer 基类 Layer成员变量 构造与析构 SetUp成员函数 前向传播与反向传播 其他成员函数 参考 博客:blog.shinelee. ...

  5. 安全研究 | Jenkins 任意文件读取漏洞分析

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由云鼎实验室 发表于云+社区专栏 一.漏洞背景 漏洞编号:CVE-2018-1999002 漏洞等级:高危 Jenkins 7 月 18 ...

  6. 手把手教你整合SSM框架(基于课工厂+MyEclipse 2017 CI 10)

    步骤1:myeclipse创建项目,导入spring框架 整合思路:因为spring和spring mvc同源,可以无缝整合,故先整合spring+mybatis,然后配置web.xml.spring ...

  7. SQL过滤字符后手工注入漏洞测试(第1题)

    https://www.mozhe.cn/bug/detail/a1diUUZsa3ByMkgrZnpjcWZOYVEyUT09bW96aGUmozhe 分析题目,属于时间盲注,这种情况,通常使用sq ...

  8. oracle nid修改dbname

    修改name的目的只是为了日后管理清晰点,不重复.我比较懒.记性又差,所以就整理记下1.检查当前nameSQL> show parameter nameNAME TYPE VALUE------ ...

  9. 我的Windows日常——鼠标无法进行拖拽的解决方法

    方法1: 鼠标右键单击任务栏 选择属性,进入任务栏和开始菜单属性 点击「开始」菜单  进入分页,单击自定义 找到并勾选启用上下文菜单和拖放 一路确定.... --------------------- ...

  10. OPPO X9007 升级到Android5.0 Color2.1(root版) 详细纪实

    今天要做个测试,而测试APK刚好是要求最低5.0版本,正好手里有个老款手机OPPO X9007,而预装的系统是4.3,试了下虽然也能运行,但是主要功能不正常,毕竟人家APK最低要求摆在那. 反正这个手 ...