Java实现顺序栈

一、分析

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

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

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

    1、初始化顺序栈

    2、销毁顺序栈

    3、清空顺序栈

    4、检测顺序栈是否为空

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

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

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

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

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

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

二、实现

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

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

2、清空顺序栈

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

3、检测顺序栈是否为空

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

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

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

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

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

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

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

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

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

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

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

三、小结

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

点赞
收藏

评论区

加载中...

相关推荐

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

栈和队列

栈原理栈(stack)又名堆栈,是一种只能在表尾进行插入和删除操作的线性表。能够进行操作的这一端被称为栈顶,相对地,把另一端称为栈底。:::warning栈内元素操作时先进后出,类似于电梯上下成员,最后进去的人最先出

什么是JavaScript 调用栈?

原文链接:什么是调用栈?我们写的JS代码大多数都是同步模式,也就是从上往下依次执行。后一个任务必须要等前一个任务结束才能开始执行,程序的执行顺序和我们代码的编写顺序是完全一致的。程序执行中每遇到一个任务都会先入栈,当前入栈的任务执行完毕后就会出栈。本来栈的

5 手写Java Stack 核心源码

Stack是Java中常用的数据结构之一,Stack具有"后进先出(LIFO)"的性质。只能在一端进行插入或者删除,即压栈与出栈栈的实现比较简单,性质也简单。可以用一个数组来实现栈结构。1.入栈的时候,只在数组尾部插入2.出栈的时候,只在数组尾部删除我们来看一下Stack的用法:如下publicstaticvoidmai

JVM内存简单总结

  根据自己的认识,简单总结下Java中的数据存储及内存分析。  Java中的内存大致可以分为三块:栈内存、堆内存、方法区内存,看图说话。!(https://oscimg.oschina.net/oscnet/c126c6b91c79f4cb9bda6bb3987cb54e848.png)  1)、栈  栈(stack):栈是限定仅在表

C语言利用va_list、va_start、va_end、va_arg宏定义可变参数的函数

在定义可变参数的函数之前,先来理解一下函数参数的传递原理:1、函数参数是以栈这种数据结构来存取的,在函数参数列表中,从右至左依次入栈。2、参数的内存存放格式:参数的内存地址存放在内存的堆栈段中,在执行函数的时候,从最后一个(最右边)参数开始入栈。因此栈底高地址,栈顶低地址,举个例子说明一下:voidtest(inta,floatb,ch