数据结构——顺序存储结构(栈)

在之前基础的介绍中,我有写过一篇关于栈的内容(https://blog.csdn.net/weixin_45432742/article/details/99850913),介绍了栈以链表实现的方法和以以数组实现的方法,但是实现的栈将其存储的数据类型限制了,只能存储int类型的数据。在这里,再优化一下,加入泛型,并用顺序表实现一个栈结构,并且将其扩展,变成一个双端栈结构。

栈是限定仅在表尾进行插入和删除操作的线性表,注意这里说的是表尾喔,是拿线性表实现的,线性表的表尾是从数组的头开始向后添加元素的。因此拿线性表去实现一个在栈顶操作的栈结构,在表尾进行操作比较方便(当然也可以从表尾向表头方向进行操作,都是一样的啦!)。下图是栈的操作示意图(再回顾一下下!)

其实栈本身也就是一个线性表,因为它的数据元素也具有线性关系,因为它的操作特殊,在栈顶进行操作,所以他是一种特殊的线性表。因为后进先出的特点,栈又可以被称为后进先出的线性表。

虽然是拿线性表实现的,但是它是栈的操作,因此有一个栈的接口(因为栈的操作受限,所以方法较List来说较少),如下类图和实现:

package 栈;
/**
 * Stack是栈的接口
 * 
 * */
public interface Stack<E> {
	/**
	 * 获取栈中元素的个数
	 * @return 栈中的元素个数
	 * */
	public int getSize();
	
	/**
	 * 判断当前栈是否为空
	 * @return 是否为空布尔值
	 * */
	public boolean isEmpty();
	/**
	 * 进栈一个元素e
	 * @param e 即将进栈的元素
	 * */
	public void push(E e);
	
	/**
	 * 出栈一个元素
	 * @return 当前出栈的栈顶元素
	 * */
	public E pop();
	
	/**
	 * 获取当前栈顶元素
	 * @return 当前栈顶的元素 不弹栈
	 * */
	public E peek();
	
	/**
	 * 清空栈
	 * */
	public void clear();
}

现在我们用我们写好的线性表(参考上一篇https://blog.csdn.net/weixin_45432742/article/details/100702745)中的方法实现栈的操作,在Stack接口下有一个子类叫ArrayStack,它是用数组,也可以说是线性表实现的。现在我们来看一下它的类图和具体实现:

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值