中缀表达式转换为后缀表达式&后缀表达式的计算

《数据结构与算法分析》练习题系列。
中缀转换成后缀的算法书上写的非常详细了,在做练习题时我就按照书上的思路用c写了一遍,但有个小错误没注意,所以一直报错,调了半天,终于好了。。。
废话不多说,程序是用栈的数组形式实现的,结构体是这样的:

#define Error -1

struct StackRecord;
typedef struct StackRecord *Stack;
typedef char ElementType;

struct StackRecord
{
    int Capacity;
    int TopOfStack;
    ElementType *Array;
};

程序已修改,添加了幂操作符。
一般的操作符运算顺序是从左到右,比如对减法:a-b-c,是先算a-b,然后用结果-c,但幂运算的顺序是从右到左,比如2^3^2,结果是512而不是64(我用手机算的是512,后来拿计算器算了一下发现是64,擦汗。。。但为了区分一般的运算符,我们假设‘^’是从右到左运算的,否则就没啥意思了,我们的目的是探究输入条件变化时算法的变化不是吗,嘿嘿。。。),所以‘^’运算符在进栈时,如果栈顶符号也是‘^’,则不弹出,而是进栈。
下面是中缀转换成后缀的代码:

/*中缀表达式转换为后缀表达式*/
char(*InfixToPostfix(char *str))[100]
{
    int count;
    char(*output)[100];
    Stack S;
    S = CreatStack(100);//创建一个堆栈

    count = 0;//输出符号流计数
    output = calloc(100, sizeof(char));//为输出符号流创建空间
    for (int i = 0; i < 100; i++)//初始化
        *output[i] = '\0';
    /*主程序*/
    for (int i = 0; str[i] != '\0'; i++)
    {
        if (str[i] != '+' && str[i] != '-' && str[i] != '*' && str[i] != '/' && str[i] != '(' && str[i] != 

你可能感兴趣的:(算法设计与分析,c语言,数据结构,typedef,struct,算法)