infixtopostfix.c
来自「实现中缀表达式向后缀表达式的转换。要求: 键盘输入一个表达式」· C语言 代码 · 共 77 行
C
77 行
#include <stdio.h>#define MAX_EXPR_SIZE 100#define MAX_STACK_SIZE 100typedef enum {LPAREN,RPAREN,PLUS,MINUS,DIVIDE,TIMES,MOD,EOS,OPERAND} precedence;static char expr[MAX_EXPR_SIZE];static int stack[MAX_STACK_SIZE];static int top=0;static int isp[]={0,19,12,12,13,13,13,0};static int icp[]={20,19,12,12,13,13,13,0};void add(int* n, precedence token){ stack[*n++]=token;}precedence delete(int* n){ return stack[*n--];}precedence getToken(char* symbol, int* n){ *symbol=expr[(*n)++]; switch(*symbol){ case '(' : return LPAREN; case ')' : return RPAREN; case '+' : return PLUS; case '-' : return MINUS; case '/' : return DIVIDE; case '*' : return TIMES; case '%' : return MOD; case ' ' : return EOS; default : return OPERAND; }}void printToken(precedence token){ printf("%d\t",token); }void inToPost(void){ char symbol; precedence token; int n=0; stack[0]=EOS; for(token=getToken(&symbol,&n); token!=EOS; token=getToken(&symbol,&n)){ if(token==OPERAND) printf("%c", symbol); else if(token==RPAREN){ while(stack[top]!=LPAREN) printToken(delete(&top)); delete(&top); } else{ while(isp[stack[top]] >= icp[token]) printToken(delete(&top)); add(&top, token); } } while( (token=delete(&top)) != EOS) printToken(token); printf("\n");}intmain(int argc, char* argv[]){ return 0;}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?