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 + -
显示快捷键?