【数据结构】堆栈(顺序栈、链式栈)

一、栈的定义

1、术语:

栈(stack):是一种只允许在表的一端进行插入或删除操作的线性表。

栈顶:表尾端,即表中允许进行插入和删除操作的一端称为栈顶。栈顶是动态的,它由一个称为栈顶指针的位置指示器指示。

栈底:表头端,即栈的最下面的那一端称为栈底。

空栈:没有元素的栈

进栈或入栈:堆栈的插入操作

出栈或退栈:堆栈的删除操作

2、栈的特点:

        “后进先出”,因此,栈又被称为后进先出(last in first out,LIFO)表。它的实现方式主要有顺序栈、链栈两种。

3、栈的抽象数据类型:

        数据元素:可以是任意类型,用泛型表示

        数据关系:数据元素建是线性关系

        数据操作:入栈、出栈、取栈顶元素、返回栈中元素个数、判断栈是否为空

       我们定义抽象数据类型如下:

package codingTest2;

public interface IStack<E> {
	E push(E item);//入栈
	E pop();//出栈
	E peek();//取栈顶元素
	int size();//返回栈中元素个数
	boolean empty();//判断栈是否为空
}

二、顺序栈

1、定义:

       顺序栈是利用顺序存储结构实现的栈,即利用一组地址连续的存储单元依次存放自栈底到栈顶的数据元素。

       类似于顺序表,它使用一维数组来存放顺序栈中的数据元素。

       栈顶指示器top设在数组下标为最大的那一端,top随着插入或删除而变化。

       当栈为空时,top=-1;其他时候,top为栈顶元素的索引号。

2、特点:

      优点:相比于链栈,顺序栈在实现以及操作上均比链栈要容易许多 

      缺点:相比链栈,顺序栈只能在事先进行预申请,所以在存放较大数据量的数据时会存在栈满或则说时栈溢出的情况,在用顺序栈时需提前注意。

import java.lan
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值