zoukankan      html  css  js  c++  java
  • [栈和队列]从中缀向后缀转换表达式

     1 #include <stdio.h>
     2 #include <stdlib.h>
     3 #include <string.h>
     4 #define INIT_STACK_SIZE 100
     5 typedef struct
     6 {
     7     char * chOperator;
     8     int dwtop;
     9 }OPND;
    10 
    11 void InitStack(OPND *);
    12 char Pop(OPND *);
    13 void Push(OPND *,char );
    14 char GetTop(OPND);
    15 
    16 char ComparePri(char op1,char op2);
    17 void printStack(OPND);
    18 
    19 char stringBuffer[128] = {''};
    20 char stringValue[128] = {''};
    21 int main()
    22 {
    23     OPND opnd;
    24     int N = 0;
    25     char ch ,*strValue,*strBuffer;
    26     scanf("%d",&N);
    27     getchar();
    28     while(N--){
    29 
    30         strValue = stringValue;
    31         strBuffer = stringBuffer;
    32 
    33         memset(stringValue,0,128*sizeof(char));
    34         memset(stringBuffer,0,128*sizeof(char));
    35 
    36         gets(stringBuffer);
    37         InitStack(&opnd);
    38         Push(&opnd,'#');
    39 
    40         ch = *strBuffer++;
    41         while(ch != '#' || GetTop(opnd) != '#'){
    42             if((ch >= 'a' && ch <= 'z')||(ch >= 'A' && ch <= 'Z')) {
    43                 *strValue = ch;
    44                 strValue++;
    45                 ch = *(strBuffer++);
    46             }
    47             else
    48             switch(ComparePri(GetTop(opnd),ch)){
    49                 case '<' : Push(&opnd,ch); ch = *(strBuffer++); break;
    50                 case '=' : Pop(&opnd);     ch = *(strBuffer++); break;
    51                 case '>' : *strValue = Pop(&opnd); strValue++; break;
    52             }
    53         }
    54         puts(stringValue);
    55     }
    56     return 0;
    57 }
    58 void InitStack(OPND *S)
    59 {
    60     S->chOperator = (char *)malloc(INIT_STACK_SIZE * sizeof(char));
    61     if(!S->chOperator) exit(1);
    62     S->dwtop = 0;
    63 }
    64 void Push(OPND *S,char ch)
    65 {
    66     *(S->chOperator + S->dwtop) = ch;
    67     S->dwtop++;
    68 }
    69 char Pop(OPND *S)
    70 {
    71     S->dwtop--;
    72     return *(S->chOperator + S->dwtop);
    73 }
    74 char ComparePri(char op1,char op2)
    75 {
    76     if((op1 == '+' || op1 == '-')&&(op2 == '*' || op2 == '/'))        return '<';
    77     else if((op1 == '(' && op2 == ')')||(op1 == '#' && op2 == '#')) return '=';
    78     else if(op1 == '(' || op1 == '#' || op2 == '(')                 return '<';
    79     else return '>';
    80 }
    81 void printStack(OPND opnd)
    82 {
    83     while(opnd.dwtop){
    84         opnd.dwtop--;
    85         printf("%c",*(opnd.chOperator + opnd.dwtop));
    86     }
    87 }
    88 char GetTop(OPND opnd)
    89 {
    90     return *(opnd.chOperator + opnd.dwtop -1);
    91 }

     

     

  • 相关阅读:
    近来无聊 写了一个google音乐的下载器
    HTML编辑器 HtmlArea
    Html编辑器 TinyMCE
    IE浏览器自定义地址协议 通过B/S程序中打开C/S程序
    html 元素的 onpropertychange 事件
    asp.net 服务器控件防止重复提交表单
    用 BindingSource 绑定窗体中控件不失去焦点无法更新数据源的问题
    动态创建大量 html dom 元素时提升性能
    很黄的日期格式化。。。
    Asp.net 导出 .html,.txt 等格式的文件
  • 原文地址:https://www.cnblogs.com/Karma-wjc/p/4023071.html
Copyright © 2011-2022 走看看