栈与后缀表达式(Python)


前言

最近在复习数据结构的相关的知识的时候,学习到了后缀表达式的相关知识。( ̄▽ ̄)~*

所以,想着在python中练练手,便写下来了我今天所想要分享的代码。ヾ(゚∀゚ゞ)

让我们话不多说,开始我们的讲解吧(o゚▽゚)o

第一次观看我博客的小朋友,请移步到我的文章我的helper模块进行观看


一、知识点讲解

1.栈

说到后缀表达式,那就不能跳过“栈”这个知识点。(`・ω・´)

1.定义和特点

栈,又名堆栈,它是一种运算受限的线性表。其限制是仅允许在表的一端进行插入和删除运算。
以上内容来自百度知道

它最大的特点便是FILO(先进后出)

这个特点非常的适用于后缀表达式或前缀表达式的计算实现。

2.操作

  • 初始化:initialize
  • 进栈:push
  • 出栈:pop
  • 长度:stack_length
  • 读取:get_top_element(一般栈的读取操作都是读取最顶端的元素)

3.具体代码

class Stack:
    def __init__(self, max_size):
        self.__stack_list = []
        self.__max_size = max_size
        self.__stack_length = 0
    def initialize(self):
        self.__stack_list.clear()
        self.__stack_length = 0
    def push(self, element):
        if self.__max_size == self.__stack_length:
            return False
        else:
            self.__stack_length += 1
            self.__stack_list.append(element)
    def pop(self):
        if self.__stack_length == 0:
            return False
        else:
            self.__stack_length -= 1
            return self.__stack_list.pop()
    def stack_length(self):
        return self.__stack_length
    def get_top_element(self):
        if self.__stack_length == 0:
            return False
        return self.__stack_list[self.__stack_length - 1]
    def stack_self(self):
        return self.__stack_list

以上的代码我放进了我的helper模块,防止很多人是跳着看的,遂我再放上一次链接:我的helper模块


2.后缀表达式

1.定义

一个表达式E的后缀形式可以如下定义:
(1)如果E是一个变量或常量,则E的后缀式是E本身。
(2)如果E是E1 op E2形式的表达式,这里op是任何二元操作符,则E的后缀式为E1’E2’ op,这里E1’和E2’分别为E1和E2的后缀式。
(3)如果E是(E1)形式的表达式,则E1的后缀式就是E的后缀式。
以上内容来自百度百科

2.计算方法

新建一个表达式,如果当前字符为变量或者为数字,则压栈,如果是运算符,则将栈顶两个元素弹出作相应运算,结果再入栈,最后当表达式扫描完后,栈里的就是结果。
以上内容来自百度百科


二、应用

1.具体代码

def operator_level(operator):
    if operator == '+' or operator == '-':
        return 1
    elif operator == '*' or operator == '/':
        return 2
        
def regular_to_infix_converter(regular_string):
    ifx_list = []
    number_string = ''
    is_number_flag = True

    for element in regular_string:
        if element == ' ':
            continue
        # print("
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值