数据结构入门(四)-栈的定义与实现

本文介绍了栈的定义,强调了其LIFO(后进先出)特性,并详细阐述了栈的顺序存储结构和链式存储结构,包括进栈、出栈操作及其在Java中的实现。此外,讨论了栈的两个应用示例:递归和四则运算表达式的求值。
摘要由CSDN通过智能技术生成

1.栈的定义

(stack)是限定仅在标尾进行插入和删除操作的线性表。
我们把允许插入和删除的一端称为栈顶,另一端称为栈底,不含任何数据元素的栈称为空栈。栈又称为后进先出(Last In First Out)的线性表简称LIFO结构

很多软件比如 Word,Photoshop等文档或图像编辑软件中都有撤销(undo)的操作,也就是用栈的方式来实现的。

的插入操作,叫做进栈,也称压栈,入栈。
的删除操作,叫做出栈,也有的叫做弹栈。

进栈出栈的变化形式

  • 1,2,3 进 =》 3,2,1出
  • 1进,1出;2进,2出,3进,3出
  • 1进,2进,2出,1出,3进,3出
  • 1进,1出,2进,3进,3出,2出
  • 1进,2进,2出,3进,3出,1出

栈的抽象数据类型

InitStack(*S):初始化操作,建立一个空栈
DestoryStack(*S):弱栈存在,销毁栈
ClearStack(*S):将栈清空
StackEmpty(S):若栈为空,返回True,否则返回false
GetTop(S,*e):弱栈存在且为非空,用e返回S的栈顶元素  
Push(*S,e):若栈S存在,插入新元素e到栈S中并成为栈底元素
Pop(*S,*e):删除栈S中栈顶元素,并用e返回元素
StackLength(S):返回栈S的元素个数  

栈的顺序存储结构及实现

栈的顺序存储结构

下标为0的一端作为栈底,因为首元素都存在栈底,因为首元素都存在栈底,变化小,所以让它作栈底。若存储栈的长度为StackSize,则栈顶位置top必须小于StackSize.当栈存在一个元素是,top等于0,因此常用-1判定条件为top等于-1

对栈操作

Java 中使用LinkedList来模拟栈的操作其中提供了以下方法

addFirst
removeFirst();
addLast();
removeLast();
在栈中,push为入栈操作,pop为出栈操作。
Push用addFirst(),pop用removeFirst(),实现后进先出
用isEmpty() 其父类的方法,判断栈是否为空
用Java来实现栈

    public class MyStack{ //定义一个栈类
        int[] array; //用int数组来保存数据,根据需要可以更换类型
        int s_size; //定义一个游标。
    public  MyStack(int i){ //定义一个带参数
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值