码迷,mamicode.com
首页 > 其他好文 > 详细

数据结构:中缀表达式转后缀表达式

时间:2015-01-16 08:42:20      阅读:117      评论:0      收藏:0      [点我收藏+]

标签:

#include <stdio.h>
#include "SqStack2.h"
#define STACKTYPE SqStack

#define BOOL int
#define TRUE 1
#define FALSE 0

BOOL isnumeric(char c)
{
    return (c >= 0 && c <= 9) ? TRUE : FALSE;
}

int lv(char c)
{
    int wt[] = {3,0,2,1,-1,1,-1,2};
    return wt[c - (];
}

void expr()
{
    char ex[] = "10+(3+4)*(12-6)";
    int i,n;
    BOOL isNumber = FALSE;//上一个字符是否是数字,连续两个数字要合并
    STACKTYPE st;
    init(&st);
    for (i = 0; ex[i] != \0; i++) {
        if (isnumeric(ex[i])){
            if (isNumber == FALSE) printf(" ");
            printf("%d", ex[i]-0);
            isNumber = TRUE;
        }
        else {
            isNumber = FALSE;
            if (ex[i] == )){//如果右括号,则匹配栈中第一个左括号
                n =  ;
                do {
                    if (n !=  ) printf(" %c", n);
                } while (pop(&st, &n)==OK && n != ();
            }
            else if (ex[i] == () {
                push(&st, ex[i]);
            }
            else {//其他运算符,输出栈中所有优先度更高的运算符
                while (getTop(st, &n) == OK && n != ( && lv(n) >= lv(ex[i]))
                    pop(&st, &n);
                push(&st, ex[i]);
            }
        }
    }

    while (pop(&st, &n) == OK)
        printf(" %c", n);

    printf("\n");
    destroy(&st);
}

main()
{
    expr();
}

 

数据结构:中缀表达式转后缀表达式

标签:

原文地址:http://www.cnblogs.com/ifan/p/4227623.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!