• 简单计算器的设计与实现

    简单计算器的设计与实现 2.4 代码部分 #include<stdio.h> #include<stdlib.h> #define TRUE 1 #define FALSE 0 #define MAXNUM 100 typedef int DataType; struct SeqStack { DataType s[MAXNUM]; int t; }; typedef struct SeqStack *PSeqStack; PSeqStack createEmptyStack_seq() { PSeqStack pastack; pastack=(PSeqStack)malloc(sizeof(struct SeqStack)); if (pastack==NULL) { printf("超出空间!!\n"); } else { pastack->t=-1; } return pastack; } int isEmptyStack_seq(PSeqStack pastack) { return pastack->t==-1; } void push_seq(PSeqStack pastack, DataType x) { if (pastack->t >= MAXNUM - 1) printf("溢出!\n"); else { pastack->t = pastack->t+1; pastack->s[pastack->t]=x; } } void pop_seq(PSeqStack pastack) { if (pastack->t==-1) { printf("未溢出!\n"); } else { pastack->t = pastack->t-1; } } DataType top_seq(PSeqStack pastack) { return pastack->s[pastack->t]; } int infixtoSuffix(const char* infix, char* suffix) { /*将中缀表达式转换为后缀表达式,顺利转换返回true,若转换过程中发现中缀表达式非法则返回false*/ int state_int = FALSE; /*state_int记录状态,等于true表示刚读入的是数字字符,等于false表示刚读入的不是数字字符, 设置这个变量是为了在每输出一个整数后输出一个空格,以免连续输出的两个整数混在一起。*/ char c, c2; PSeqStack ps = createEmptyStack_seq(); /*运算符栈*/ int i, j = 0; if(infix[0]=='\0') { return FALSE; /*不允许出现空表达式*/ } for(i=0; infix[i]!='\0';i++) { c=infix[i]; switch(c) { case ' ': case '\t': case '\n': if(state_int== TRUE) { suffix[j++]=' ';/*状态从true转换为false时输出一个空格*/ } state_int= FALSE; break; /*遇到空格或制表符忽略*/ case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': state_int =TRUE; suffix[j++]=c; /*遇到数字输出*/

    5
    348
    164KB
    2009-05-29
    33
上传资源赚积分or赚钱