📄 infixtopostfix.c
字号:
#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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -