Java实现顺序栈

Wesley13
• 阅读 807

一、分析

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

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

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

    1、初始化顺序栈

    2、销毁顺序栈

    3、清空顺序栈

    4、检测顺序栈是否为空

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

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

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

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

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

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

二、实现

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

 1 class InitStack{
 2     
 3     private int [] stack = null;      //存储元素
 4     
 5     private int top = 0;           //指示栈顶元素在顺序栈中的位置
 6     
 7     public InitStack(int max) {       //初始化自定义大小的顺序栈
 8         this.stack = new int[max];
 9     }
10 }

2、清空顺序栈

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

3、检测顺序栈是否为空

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

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

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

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

 1 public int [] getTop() {
 2 
 3     if (this.top == 0) {        //如果顺序栈为空,则返回空
 4         return null;
 5     }
 6 
 7     int [] i = new int[1];
 8     i[0] = stack[this.top - 1];    //获取栈顶元素
 9 
10     return i;
11 }

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

 1 public boolean push(int value) {
 2 
 3     if(this.top == this.stack.length) {    //判断顺序栈是否已满
 4         return false;
 5     }
 6 
 7     this.stack[this.top] = value;        //压入元素
 8     this.top++;                  //栈顶指针加一
 9     return true;
10 }

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

 1 public int [] pop() {
 2 
 3     if (this.top == 0) {      //判断顺序栈是否已空
 4         return null;
 5     }
 6 
 7     int [] i = new int[1];
 8     this.top--;            //栈顶指针减一
 9     i[0] = stack[this.top];    //获取栈顶元素
10     return i;
11 }

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

 1 public String stackTraverse() {            //通过输出顺序栈元素来表示遍历
 2 
 3     String s = "";                    //存储要输出的元素
 4 
 5     for (int i = 0; i < this.top; i++) {      //循环遍历
 6         s += this.stack[i] + "、";
 7     }
 8 
 9     if(s.length() == 0) {               //如果未获取到元素,返回空字符串
10         return s;
11     }
12 
13     return s.substring(0,s.length() - 1);     //除去最后一个顿号后返回
14 }

三、小结

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

点赞
收藏
评论区
推荐文章
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Wesley13 Wesley13
3年前
java运行时数据区
运行时数据区包括以下几个部分:程序计数器,堆,java栈,本地方法栈,方法区1.程序计数器:当CPU需要执行指令时,需要从程序计数器中获取当前需要执行的指令所在存储单元的地址。用来指示执行哪条指令。其大小不会随程序的执行而发生改变。2.Java栈:java方法执行的内存模型。存放的时一个个栈帧,每个栈帧对应一个被调用的方法。  栈帧中包括:局
九路 九路
4年前
5 手写Java Stack 核心源码
Stack是Java中常用的数据结构之一,Stack具有"后进先出(LIFO)"的性质。只能在一端进行插入或者删除,即压栈与出栈栈的实现比较简单,性质也简单。可以用一个数组来实现栈结构。1.入栈的时候,只在数组尾部插入2.出栈的时候,只在数组尾部删除我们来看一下Stack的用法:如下publicstaticvoidmai
菜园前端 菜园前端
1年前
什么是JavaScript 调用栈?
原文链接:什么是调用栈?我们写的JS代码大多数都是同步模式,也就是从上往下依次执行。后一个任务必须要等前一个任务结束才能开始执行,程序的执行顺序和我们代码的编写顺序是完全一致的。程序执行中每遇到一个任务都会先入栈,当前入栈的任务执行完毕后就会出栈。本来栈的
似梦清欢 似梦清欢
1年前
栈和队列
栈原理栈(stack)又名堆栈,是一种只能在表尾进行插入和删除操作的线性表。能够进行操作的这一端被称为栈顶,相对地,把另一端称为栈底。:::warning栈内元素操作时先进后出,类似于电梯上下成员,最后进去的人最先出
Stella981 Stella981
3年前
JVM内存简单总结
  根据自己的认识,简单总结下Java中的数据存储及内存分析。  Java中的内存大致可以分为三块:栈内存、堆内存、方法区内存,看图说话。!(https://oscimg.oschina.net/oscnet/c126c6b91c79f4cb9bda6bb3987cb54e848.png)  1)、栈  栈(stack):栈是限定仅在表
Wesley13 Wesley13
3年前
C语言利用va_list、va_start、va_end、va_arg宏定义可变参数的函数
在定义可变参数的函数之前,先来理解一下函数参数的传递原理:1、函数参数是以栈这种数据结构来存取的,在函数参数列表中,从右至左依次入栈。2、参数的内存存放格式:参数的内存地址存放在内存的堆栈段中,在执行函数的时候,从最后一个(最右边)参数开始入栈。因此栈底高地址,栈顶低地址,举个例子说明一下:voidtest(inta,floatb,ch
Stella981 Stella981
3年前
JVM 字节码指令表
字节码助记符指令含义0x00nop什么都不做0x01aconst\_null将null推送至栈顶0x02iconst\_m1将int型1推送至栈顶0x03iconst\_0将int型0推送至栈顶0x04iconst\_1将int型1推送至栈顶0x05ic
Wesley13 Wesley13
3年前
Java内存管理
一、Java内存分类1、Java有几种存储区域?\寄存器\在CPU内部,开发人员不能通过代码来控制寄存器的分配,由编译器来管理\栈\在Windows下,栈是向低地址扩展的数据结构,是一块连续的内存的区域,即栈顶的地址和栈的最大容量是系统预先规定好的。\优点:由系统自动分配,速度较快。
菜园前端 菜园前端
1年前
什么是栈?
原文链接:栈是基础数据结构,栈是一种遵循后进先出原则的有序集合,添加新元素的一端称为栈顶,另一端称为栈底。操作栈的元素时,只能从栈顶操作(添加、移除、取值)。实现功能在JavaScript中没有栈,但是可以通过Array实现栈的所有功能push()入栈po