数据结构·练习·运算符号的合法性判断
一、问题描述
一串至多包含加减乘除四则运算的算式,判断其运算符号使用情况是否符合规范。
二、算法概述
1、问题分析
1、问题抽象与分类
- 算符判断
多出 - 括号判断
左多
右多
2、算法描述
- 头文件引用库<stdio.h>,<stdlib.h>和<string.h>
- 前置函数(置空栈)(出栈)(入栈)
- 主函数程序:
- 定义变量;
- 获取输入数据,并为之分配空间;
- 排查算符多出的情况;
- 排查括号左多的情况;
- 排查括号右多的情况;
- 结果输出。
三、输入说明
任意输入一串至多包含加减乘除四则运算的算式。
四、输出说明
使用合法则输出“运算符号使用合法”;
算符多出则输出“算符多出!”;
括号左多则输出“左括号多出!”;
括号右多则输出“右括号多出!”;
输入样例1:
{[a+(b+c)]d-e}(f+g)
输出样例1:
运算符号使用合法
输入样例2:
{[a+b+c)]d-+e}(fg
输出样例2:
算符多出!
左括号多出!
右括号多出!
五、程序实现
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define M 100
typedef char datatype;
//定义节点
typedef struct
{
datatype data[M];
int Top;
}Stack;
Stack*S;
/*前置函数*/
//置空栈
Stack*SetStack(Stack*S)
{
S=(Stack*)malloc(sizeof(Stack));
S->Top=-1;
return S;
}
//进栈
Stack*PushS(Stack*S,datatype data)