在考研复习过程中,我发现严书上给出的代码非常不易于理解,并且搜索引擎搜到的一些博客所写的代码实在是一言难尽。所以在此更新一些根据我自己的理解写的代码,希望可以帮助到初学者以及正在复习数据结构的人。同时也希望大家可以重视代码的规范性,提高代码的可阅读性。一定要做到见名知意。不要写出类似int a,b,c,d,e,f,g,以及不缩进不使用驼峰命名法的垃圾代码。
#include <iostream>
using namespace std;
#define MAXSIZE 100
void inFixToPostFix(const char original[], char result[], int result_top);
void inFixToPreFix(char infix[], int length, char result[], int result_top);
int getPriority(char c);
int main() {
char result[MAXSIZE];
char original[MAXSIZE] = {'a', '+', 'b', '-', 'a', '*', '(', '(', 'c', '+', 'd', ')', '/', 'e', '-', 'f', ')', '+',
'g', '\0'};
int m = -1;
inFixToPostFix(original, result, m);
int i = 0;
while (result[i] != '\0') {
cout << result[i++] << " ";
}
}
int getPriority(char c) {
if (c == '+' || c == '-') {
return 0;
}
if (c == '*' || c == '/') {
return 1;
}
return -1;
}
void inFixToPostFix(const char original[], char result[], int result_top) {
char aid[MAXSIZE];
int aid_top = -1;
int i = 0;
while (original[i] != '\0') {
if (original[i] >= 'a' && original[i] <= 'z') {
result[++result_top] = original[i++];
} else if (original[i] == '(') {
aid[++aid_top] = original[i++];
} else if (original[i] == '+' || original[i] == '-' || original[i] == '*' || original[i] == '/') {
if (aid_top == -1 || getPriority(original[i]) > getPriority(aid[aid_top])) {
aid[++aid_top] = original[i++];
} else {
while (getPriority(original[i]) <= getPriority(aid[aid_top]) && aid_top >= -1) {
result[++result_top] = aid[aid_top--];
}
}
} else if (original[i] == ')') {
while (aid[aid_top] != '(') {
result[++result_top] = aid[aid_top--];
}
--aid_top;
++i;
}
}
while (aid_top != -1) {
result[++result_top] = aid[aid_top--];
}
}
···