这个算法是在阅读大话数据结构中看到的,里面讲到在讲到实现四则元算最好的数据结构是栈;栈遵循后进先出,这与我们做数学题从左到右的认知是一样的。
有兴趣的同学可以去了解下,下面上代码
#coding:utf8
def opNum(data):
dataSpace = []
lableSpace = []
h = '*,/'
for i in data:
if i in "-,+,*,/,(,)":
if i == ")":
while lableSpace != []:
k = lableSpace.pop()
if k == "(":
break
f = dataSpace.pop()
s = dataSpace.pop()
dataSpace.append(str(eval("%s%s%s"%(s,k,f))))
else:
if lableSpace != []:
p = lableSpace.pop()
lableSpace.append(p)
if i in h and p not in h:
lableSpace.append(i)
elif i not in h and p in h:
while lableSpace != []:
f = dataSpace.pop()
s = dataSpace.pop()
b = lableSpace.pop()
dataSpace.append(str(eval("%s%s%s"%(s,b,f))))
lableSpace.append(i)
else:
lableSpace.append(i)
else:
lableSpace.append(i)
else:
dataSpace.append(i)
while lableSpace != []:
f = dataSpace.pop()
s = dataSpace.pop()
b = lableSpace.pop()
dataSpace.append(str(eval("%s%s%s"%(s,b,f))))
return int(dataSpace[0])
if __name__=='__main__':
#data = ['9','+','(','3','-','1',')','*','3','+','10','/','2']
data = ['3','+','8','-','(','(','3','-','1',')','+','2',')','*','1']
print opNum(data)