首先申明头文件
#include "stdafx.h"
#include "iostream"
#include <stdio.h>
#include <string.h> // 用于获取字符串长度
#include <stdlib.h>
using namespace std;
定义栈相关的变量及函数操作
// 定义栈结构
typedef struct
{
double *data; // 数据域数组名
int top; // 栈顶
int stackSize; // 栈最大可用容量
} Stack;
// 初始化栈,输入栈名和容量
void initStack(Stack *stack, int stackSize)
{
stack->data = new double[stackSize]; // 申请一段连续的double类型空间,首地址赋值给data
stack->top = -1; // 栈顶初始化为-1,代表栈空
stack->stackSize = stackSize; // 赋值栈的容量
}
// 判断栈是否为空,为空返回1,非空返回0
int isEmpty(Stack *stack)
{
return stack->top == -1; // 判断栈顶是否为-1,是则代表栈空,输出1
}
// 将值入栈
void push(Stack *stack, double value)
{
if (stack->top < stack->stackSize - 1) // 栈顶未到最大容量
{
stack->data[++stack->top] = value; // 栈顶先自增,再存放元素
}
else
{
cout << "栈满!" << endl;
}
}
// 出栈,返回出栈的元素值,栈空返回0
double pop(Stack *stack)
{
if (!isEmpty(stack)) // 栈非空
{
return stack->data[stack->top--]; // 先取栈顶元素,栈顶再自减
}
else
{
cout << "栈空!" << endl;
return 0; // 栈为空时返回一个默认值
}
}
// 获取栈顶元素
double getTop(Stack *stack)
{
if (!isEmpty(stack)) // 栈非空
{
return stack->data[stack->top]; // 返回栈顶元素值
}
else // 栈空
{
return 0; // 栈为空时返回一个默认值
}
}
// 释放栈空间
void destroy(Stack *stack)
{
delete[] stack->data;
stack->top = -1;
stack->stackSize = 0;
}
定义数与表达式相关的函数操作
// 判断是否为操作符(+ - * /和左右小括号),是则返回1,不是返回0
int isOperator(char ch)
{
return (ch == '+' || ch == '-' || ch == '*' || ch == '/' || ch == '(' || ch == ')');
}
// 判断是否为数字,是则返回1,不是返回0
int isNumber(char ch)
{
return (ch >= '0' && ch <= '9');
}
// 判断是否为合法表达式
int isCorrectExpression(char *expression)
{
int i = 0;