python初步了解栈(中缀表达式转后缀表达式)

python初步了解栈

栈是一种后入先出的数据结构。

python用列表实现堆栈非常容易,使用append函数,即可实现堆栈,pop()函数即可实现从栈顶取出元素。

stack = [3, 4, 5]
stack.append(6)
stack.append(7)
print(stack)
#[3, 4, 5, 6, 7]
print(stack.pop())
#7
print(stack)
#[3, 4, 5, 6]
print(stack.pop())
#6
print(stack.pop())
#5
print(stack)
#[3, 4]#####队列

使用栈来完成中缀表达式转后缀表达式的问题

如:将3*(5–2)+7转换为352-*7+

完成这个问题有以下几个要点

对于输入的算式,先对它的每个元素进行判断,建立一个存储运符的栈,和最终表达式。

(1)如果元素为数字则直接存入最终表达式中,如果不是,则再进行判断。

(2)当遇到左括号存入栈。

(3)当遇到右括号,不断从栈中取出符号,存入最终表达式,直到取到左括号。

(4)遇到运算符,先将它与栈顶的符号进行优先级判断,如果运算符的优先级大等于栈顶的符号,则不断取出栈顶,存入最终表达式中。

(优先级乘除>加减>左括号)

最后从栈顶不断取出剩余的运算符,存入最终表达式

def pd(a):
    if a in '*/':
        return 3
    elif a in '+-':
        return 2
    else:
        return 1
l = list(input("请输入表达式:"))
l1=[]
r=[]
for i in l:
    if i in "+-*/":
        if l1:
            while (pd(l1[-1]) >= pd(i)):
                r.append(l1.pop())
                if len(l1) == 0:
                    break
            l1.append(i)
        else:
            l1.append(i)
    elif i == '(':
        l1.append(i)
    elif i == ')':
        t = l1.pop()
        while t != '(':
            r.append(t)
            t = l1.pop()
    else:
        r.append(i)
while l1:
    for i in l1:
        r.append(l1.pop())
for i in r:
    print(i,end='')
posted @ 2022-12-09 17:43  牛鱼针  阅读(144)  评论(0)    收藏  举报