笔记:
栈(堆栈)是一种**先进后出(First In Last Out,FILO)**的线性数据结构,操作主要在一端(栈顶)进行,常见操作有入栈(push,元素进栈顶)、出栈(pop,栈顶元素出栈)、查看栈顶元素(peek)等。比如叠盘子,先放的在最下面,最后才能取到;后放的在最上面,最先能取到,这就是栈的“先进后出”特性的直观体现。
栈的主要特点:
•后进先出,即后进栈的元素先出栈。
•每次进栈的元素都作为新栈顶元素,每次出栈的元素只能是当前栈顶元素。
•栈也称为后进先出表或者先进后出表。
队列(queue)是一种只能在不同端进行插入或删除操作的线性表。 进行插入的一端称做队尾(
rear),进行删除的一端称做队头或队首 (front)。
队列的插入操作通常称为进队或入队(push),队列的删除操作通常 称为出队或离队(pop)。
队列的主要特点:
先进先出,即先进队的元素先出队。
每次进队的元素作为新队尾元素,每次出队的元素只能是队头的 元素。
队列也称为先进先出表。
1047

150
1. 初始化
创建一个空栈,用于存储操作数。 2. 遍历逆波兰表达式
对逆波兰表达式中的每个元素(token)进行处理:
如果是操作数:
将其转换为对应的数值(题目中逆波兰表达式的操作数都是整数),然后压入栈中。比如遇到元素 "5" ,将其转换为整数 5 后压入栈。
如果是运算符: 从栈中依次弹出两个操作数,注意弹出的顺序是先弹出的为右操作数,后弹出的为左操作数。例如,栈中依次存储了 2 和 3 ,弹出时先弹出 3 作为右操作数,再弹出 2 作为左操作数 。 根据运算符进行相应的运算,比如遇到 "*" 运算符,就计算 左操作数 * 右操作数 ,得到运算结果。 将运算结果重新压入栈中,为后续可能的运算做准备。
3. 遍历结束后 遍历完整个逆波兰表达式后,栈中应该只剩下一个元素,这个元素就是整个逆波兰表达式的计算结果,将其返回即可。 复杂度分析 时间复杂度:需要遍历逆波兰表达式一次,时间复杂度为 O(n) ,其中 n 是逆波兰表达式中元素 的个数。 空间复杂度:在最坏情况下,栈中会存储所有的操作数,即空间复杂度为 O(n) 。

509

被折叠的 条评论
为什么被折叠?



