3.线性结构-栈

栈 stack

栈是一种操作受限的顺序表。

栈中的元素只能先进后出,即FILO(First In Last Out)

栈是只能在表的一端进行插入和删除数据元素的线性表,允许进行插入和删除操作的一端称为栈顶,另一端称为栈底。

不含数据元素的表称为空栈。

栈的运算

  1. 初始化。
  2. 清空栈。
  3. 读取栈顶元素。
  4. 检查栈是否为空。
  5. 入栈。
  6. 出栈。

顺序存储结构

采用顺序存储方式的栈称为顺序栈。

与线性表一样,栈也可以采用顺序存储方式。将栈底到栈顶的数据元素依次存放到一组连续的存储单元中,并用一个变量top指示栈顶元素的位置。习惯上,将变量top称为栈顶指针。

当栈中不存在任何元素时,栈顶指针不指向表中的任何位置。

在这里插入图片描述

链式存储结构

使用链式存储结构存储的栈简称链栈。

栈也可以采用链式存储结构。在链式存储方式下,栈中的数据元素存储在一组任意(连续或者不连续)的存储单元中,用指向数据元素存储位置的指针来表示数据元素入栈的先后关系。用一个指针top指向栈顶元素,指针top称为栈顶指针。

如有一组数据元素a1,a2,,an按顺序入栈,则链栈的存储结构如图所示。

在这里插入图片描述

栈的应用

在计算机科学领域,栈具有广泛的应用。常常利用栈来求解表达式的值、递归实现等问题。

表达式求值

在计算机科学领域中,常用两种形式来表示算术表达式。

第一种称为中缀表达式,用算术运算符和括号把运算对象连接起来,双目运算符位于两个运算对象之间,如(a+b)*c

第二种称为后缀表达式,也称逆波兰表达式,由波兰科学家卢卡谢维奇(Lukasiewicz)提出,把运算符放在参与该运算的两个运算对象
之后,如ab+c*。

可以采用如下规则把中缀表达式转换为后缀表达式。
(1)把中缀表达式中的所有运算符置于它的两个运算对象之后。
(2)去掉表达式中的所有括号。

计算中缀表达式时,需要确定各运算符的优先级,先计算优先级高的运算符。对于相同优先级的运算符,则按照从左到右的顺序计算。

与中缀表达式相反,计算后缀表达式时,无需考虑运算符的优先级,只需要以从左到右按照表达式出现的先后次序进行计算即可。

栈与递归

递归是一种重要的程序设计技术。很多问题可以很方便、简洁地用递归程序解决。

递归的定义:如果一个对象的组成部分的定义与它本身相同,则称该对象是递归的;如果一个过程执行时直接或者间接地调用自己,则称这个过程是递归的。

满足如下条件的问题可以用递归方法求解:
(1)该问题可以被转化为一个或多个较简单的新问题,新问题与原问题的求解方法相同,只是规模不同。
(2)有一个结束递归的条件,称为递归边界,不能出现无穷递归。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值