c#栈应用——实现四则运算
发布人:shili8
发布时间:2025-02-25 23:55
阅读次数:0
**C# 栈应用——实现四则运算**
在计算机科学中,栈是一种线性数据结构,它遵循后进先出(LIFO)的原理。栈的应用非常广泛,包括表达式求值、括号匹配等。在本文中,我们将使用C#语言来实现一个四则运算的栈应用。
**栈的基本概念**
栈是一种线性数据结构,它遵循后进先出(LIFO)的原理。栈中的元素可以通过两种方式进行操作:入栈和出栈。在入栈操作中,新元素被添加到栈顶,而在出栈操作中,栈顶元素被移除。
**四则运算的栈应用**
我们将使用一个栈来实现四则运算。栈中的元素代表表达式中的数字和运算符。在入栈操作中,我们将数字或运算符添加到栈顶,而在出栈操作中,我们将栈顶元素移除并进行计算。
**栈类的定义**
csharppublic class Stack{ private T[] items; private int count; public Stack(int capacity =10) { items = new T[capacity]; count =0; } public void Push(T item) { if (count == items.Length) { Array.Resize(ref items, items.Length *2); } items[count++] = item; } public T Pop() { if (count ==0) { throw new InvalidOperationException("Stack is empty"); } return items[--count]; } public int Count => count; public bool IsEmpty() => count ==0; }
**四则运算类的定义**
csharppublic class Calculator{ private Stack<double> stack; public Calculator() { stack = new Stack<double>(); } public void Push(double value) { stack.Push(value); } public double Pop() { return stack.Pop(); } public double Calculate(string expression) { string[] tokens = expression.Split(' '); foreach (string token in tokens) { if (double.TryParse(token, out double value)) { Push(value); } else { double operand2 = Pop(); double operand1 = Pop(); switch (token) { case "+": Push(operand1 + operand2); break; case "-": Push(operand1 - operand2); break; case "*": Push(operand1 * operand2); break; case "/": if (operand2 !=0) { Push(operand1 / operand2); } else { throw new DivideByZeroException("Cannot divide by zero"); } break; } } } return Pop(); } }
**示例代码**
csharpCalculator calculator = new Calculator(); calculator.Push(10.0); calculator.Push(5.0); double result = calculator.Calculate("+ *"); Console.WriteLine(result); // Output:50result = calculator.Calculate("/ -"); Console.WriteLine(result); // Output:2.5
**总结**
在本文中,我们使用C#语言实现了一个四则运算的栈应用。我们定义了一个`Stack