问题描述:用数组来实现栈的基本操作
涉及变量:stackElem:Object[]型元素,存放栈元素(本数组从1号位置开始存储)
maxsize:可存放的最大元素个数
top:实际元素个数,栈顶元素下标
涉及教材:《数据结构——Java语言描述(第2版)》 清华大学出版社
栈是一种特殊的线性表,数据元素间的逻辑关系与线性表相同,
不同的是栈仅允许在表尾(栈顶)进行插入删除操作,即入栈,出栈操作
栈里的元素遵循“先进后出,后进先出”的规则,该规则是由栈的特点 ↑ 推断而来
栈的基本操作与线性表的基本操作大致相同:
置空,判空,求长度,陈列元素
但也有独有的 入栈,出栈,取栈顶元素等操作
栈的基本操作接口代码如下:
在顺序栈中,使用数组来实现数据元素的存放,因此需要一个实际长度来标记数组
此处我采用的是用从下标为1的位置开始存储的存储方式,而非书上从0开始存储的存储方式
所以算法的书写略有不同,且相较之下少了一个存储单位,因此初始化时比maxsize多了1个单位
此处需注意不要出错
栈的初始化代码如下:
在初始化时,一开始会默认有 空参数的空构造方法,但书写了自己的构造方法后会覆盖该构造方法
若书写了带参数的构造方法,一般会再书写一个不带参数的构造方法
以防在使用时忘传参数而报错
判空方法:实际元素个数为0时,该栈为空
置空方法:若判空方法判断为true,则该栈为空
求长度:即求实际元素个数,返回top即可
陈列各元素:此算法中从下标从top位置开始,到下标为1时结束
栈的特性是后进先出,从栈顶开始陈列各元素
入栈:需判满,再操作,此处由于top是指向栈顶元素,故需先移动top的位置,再入栈
//书上的算法是用top指向栈顶元素的下一元素
出栈:直接将top所在位置的元素返回即可,但出栈即删除栈顶元素,故要将实际元素个数top减少1
取栈顶元素:返回栈顶元素即可,此时不需要更改实际元素个数
以上是我对实现栈的基本操作的一些看法,希望对各位有所帮助
190119 Rewivy