数据结构之线性结构(堆栈)

本文探讨了数据结构中的线性结构——堆栈,重点讲解了堆栈的抽象数据类型、顺序和链式存储实现,以及在表达式求值(包括后缀表达式和中缀表达式)中的应用。堆栈遵循后入先出(LIFO)原则,其操作包括入栈(Push)和出栈(Pop)。通过堆栈可以有效地进行中缀到后缀表达式的转换和表达式求值。
摘要由CSDN通过智能技术生成

本文为数据结构之线性结构(堆栈),根据网课而整合的笔记。

计算机如何进行表达式求值?

  • 表达式由两类对象构成:

    1. 运算数,如2、3、4
    2. 运算符号,如+、-、*、/
  • 不同运算符号优先级不一样

后缀表达式

  • 中缀表达式:运算符号位于两个运算数之间。如,a+b*c-d/e

  • 后缀表达式:运算符号位于两个运算数之后。如,abc*+de/-

【例】62/3-42*+=?

后缀表达式求值策略:从左向右“扫描”,逐个处理运算数和运算符号

1.遇到运算数怎么办?如何“记住”目前还不参与运算的数?

2.遇到运算符号怎么办?对应的运算数是什么?

启示:需要有种存储方法,能顺序存储算数,并在需要时“倒序”输出

堆栈的抽象数据类型描述

堆栈(Stack):具有一定操作约束的线性表

  • 只在一堆(栈顶,Top)做插入、删除

  • 插入数据:入栈(Push)

  • 删除数据:出栈(Pop)

  • 后入先出原则:Last In First Out(LIFO)

类型名称:堆栈(Stack)

数据对象集:一个有0或多个元素的有穷线性表。

操作集:长度为MaxSize的堆栈S<-Stack,堆栈元素item<-ElementType

1.Stack CreateStack(int MaxSize): 生成空堆栈,其最大长度为MaxSize;

2.int IsFull(Stack S,int MaxSize):判断堆栈S是否已满;

3.void Push(Stack S,ElementType item):将元素item压入堆栈

4.int IsEmpty(Stack S):判断堆栈S是否为空;

5.ElementType Pop(Stack S):删除并返回栈顶元素;

ps:Push和Pop可以穿插交替进行;

例图:

在这里插入图片描述

栈的顺序存储实现

栈的顺序存储结构通常由一个一维数组和一个记录栈顶元素位置的变量组成。

#define MaxSize <储存数据元素的最大个数>
typedef struct SNode*Stack;
struct SNode{
   
	ElementType Data[MaxSize];
	int Top;
};

(1)入栈

void 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值