📅  最后修改于: 2023-12-03 15:28:45.811000             🧑  作者: Mango
本题是门户网站 GATE-IT-2004 的第 51 题,题目难度适中,主要考察程序员对于基本数据结构和算法的掌握情况。题目要求编写一个程序,实现一个具有数学计算器功能的简单计算器,支持加减乘除四则运算。
程序主要是通过以下步骤实现:
以下是一个 Python 语言实现的参考代码示例:
class Stack:
# 定义栈的初始化方法
def __init__(self):
self.items = []
# 定义判断栈是否为空的方法
def is_empty(self):
return self.items == []
# 定义向栈中添加元素的方法
def push(self, item):
self.items.append(item)
# 定义从栈中弹出栈顶元素的方法
def pop(self):
return self.items.pop()
# 定义获取栈顶元素的方法
def peek(self):
return self.items[-1]
# 定义获取栈中元素数量的方法
def size(self):
return len(self.items)
# 定义一个函数,用来实现四则运算计算器
def calculator(expression):
# 建立数字栈和符号栈
num_stack = Stack()
op_stack = Stack()
# 定义操作符的优先级
priority = {'+': 0, '-': 0, '*': 1, '/': 1}
# 循环遍历表达式中的每一个元素
for item in expression:
# 如果当前元素为数字,则直接入数字栈
if item.isdigit():
num_stack.push(int(item))
# 如果当前元素为操作符,则需要进行一定的逻辑处理
elif item in priority.keys():
while (not op_stack.is_empty()) and (priority[item] <= priority[op_stack.peek()]):
# 如果当前操作符的优先级比符号栈顶的操作符优先级低,则需要对前面的操作符进行运算
op = op_stack.pop()
num2 = num_stack.pop()
num1 = num_stack.pop()
if op == '+':
num_stack.push(num1 + num2)
elif op == '-':
num_stack.push(num1 - num2)
elif op == '*':
num_stack.push(num1 * num2)
elif op == '/':
num_stack.push(num1 / num2)
# 将当前操作符入符号栈
op_stack.push(item)
# 表达式遍历完后,可能还有一些操作符没有进行运算
while not op_stack.is_empty():
op = op_stack.pop()
num2 = num_stack.pop()
num1 = num_stack.pop()
if op == '+':
num_stack.push(num1 + num2)
elif op == '-':
num_stack.push(num1 - num2)
elif op == '*':
num_stack.push(num1 * num2)
elif op == '/':
num_stack.push(num1 / num2)
# 返回最终的计算结果
return num_stack.pop()
# 测试
print(calculator("3+2*5"))
print(calculator("6-2/2"))
print(calculator("1+2*3-4"))
以上是一个基于 Stack 数据结构实现的简单计算器程序,代码量较少,但是功能强大,可以对表达式进行加减乘除四则运算,并且可以处理括号嵌套的情况。