顺序栈的实现问题

问题描述:用数组来实现栈的基本操作

涉及变量:stackElem:Object[]型元素,存放栈元素(本数组从1号位置开始存储)

                 maxsize:可存放的最大元素个数

                 top:实际元素个数,栈顶元素下标

涉及教材:《数据结构——Java语言描述(第2版)》 清华大学出版社

栈是一种特殊的线性表,数据元素间的逻辑关系与线性表相同,

不同的是栈仅允许在表尾(栈顶)进行插入删除操作,即入栈,出栈操作

栈里的元素遵循“先进后出,后进先出”的规则,该规则是由栈的特点 ↑ 推断而来

栈的基本操作与线性表的基本操作大致相同:

置空,判空,求长度,陈列元素

但也有独有的 入栈,出栈,取栈顶元素等操作

栈的基本操作接口代码如下:

在顺序栈中,使用数组来实现数据元素的存放,因此需要一个实际长度来标记数组

此处我采用的是用从下标为1的位置开始存储的存储方式,而非书上从0开始存储的存储方式

所以算法的书写略有不同,且相较之下少了一个存储单位,因此初始化时比maxsize多了1个单位

此处需注意不要出错

栈的初始化代码如下:

在初始化时,一开始会默认有 空参数的空构造方法,但书写了自己的构造方法后会覆盖该构造方法

若书写了带参数的构造方法,一般会再书写一个不带参数的构造方法

以防在使用时忘传参数而报错

判空方法:实际元素个数为0时,该栈为空

置空方法:若判空方法判断为true,则该栈为空

求长度:即求实际元素个数,返回top即可

陈列各元素:此算法中从下标从top位置开始,到下标为1时结束

栈的特性是后进先出,从栈顶开始陈列各元素

入栈:需判满,再操作,此处由于top是指向栈顶元素,故需先移动top的位置,再入栈

//书上的算法是用top指向栈顶元素的下一元素

出栈:直接将top所在位置的元素返回即可,但出栈即删除栈顶元素,故要将实际元素个数top减少1

取栈顶元素:返回栈顶元素即可,此时不需要更改实际元素个数

以上是我对实现栈的基本操作的一些看法,希望对各位有所帮助

190119 Rewivy

猜你喜欢

转载自www.cnblogs.com/rewivy/p/10292115.html