标签:blog http io color os ar for sp div

#include<iostream>usingnamespace std; typedefstruct SqStack{ int* base; int* top; intsize;}SqStack; #define STACK_INIT_SIZE  100#define STACKINCREMENT   20voidInitSqStack(SqStack &t);voidpush(SqStack &t, intn);int out(SqStack &t);int Empty( SqStack &t);charGetTop(SqStack &t);charPrecede(char ,char); int main(){    charch; SqStack OPTR;InitSqStack(OPTR); SqStack OPND;InitSqStack(OPND);    push(OPTR,‘=‘);        ch=getchar(); if(ch==‘-‘){        //第一个数为负数  intm=0;  ch=getchar();   while(ch<=‘9‘&&ch>=‘0‘){    m=m*10+ch-48;    ch=getchar();                                 }    push(OPND,m*(-1)); }         while(ch!=10){  intm=0; int flag=1;   char ch1=ch;         if(ch1==‘(‘){     charch2;   push(OPTR,ch);   while((ch=getchar())==‘(‘)                 push(OPTR,ch);       ch2=ch;   if(ch2==‘-‘){               //出现负数    flag=-1;    ch=getchar();    }         while(ch<=‘9‘&&ch>=‘0‘){      m=m*10+ch-48;      ch=getchar();                                   }            if(ch==‘)‘)              //形如(-1)的负数 还有形如(-1+2*5  中的负数     {     out(OPTR);     ch=getchar();     } } else{      while(ch<=‘9‘&&ch>=‘0‘){    m=m*10+ch-48;    ch=getchar();                               } }  if(m)    push(OPND,m*flag);  switch(Precede(GetTop(OPTR),ch)){                          case‘<‘:push(OPTR,ch);ch=getchar();break;                  case‘=‘:out(OPTR);ch=getchar();break;                   case‘>‘:{                     intm2=out(OPND),m1=out(OPND);                                   //注意m1和m2的顺序  后一个操作数先出来用m2接收                     switch(out(OPTR))                     {                          case‘+‘:push(OPND,m1+m2);break;                                   case‘-‘:push(OPND,m1-m2);break;                                   case‘*‘:push(OPND,m1*m2);break;                                   case‘/‘:push(OPND,m1/m2);break;                      }                     break;            }    } } printf("%d",out(OPND));     getchar();  }    voidpush(SqStack &t, intn){                if((t.top-t.base)>=t.size){  t.base=(int*)realloc(t.base,(t.size+STACKINCREMENT)*sizeof(int));  if(!t.base)   exit(1); }  *(t.top)=n;     t.top++;  }          intout(SqStack &t){              t.top--; return*(t.top);}            intEmpty( SqStack &t){ intm=(t.top-t.base);   returnm;}    charGetTop(SqStack &t){   return*(t.top-1);}       charPrecede(char c,char d){    charyouxian[7][7]=    {        {‘>‘,‘>‘,‘<‘,‘<‘,‘<‘,‘>‘,‘>‘},        {‘>‘,‘>‘,‘<‘,‘<‘,‘<‘,‘>‘,‘>‘},        {‘>‘,‘>‘,‘>‘,‘>‘,‘<‘,‘>‘,‘>‘},        {‘>‘,‘>‘,‘>‘,‘>‘,‘<‘,‘>‘,‘>‘},        {‘<‘,‘<‘,‘<‘,‘<‘,‘<‘,‘=‘,‘>‘},        {‘>‘,‘>‘,‘>‘,‘>‘,‘>‘,‘>‘,‘>‘},        {‘<‘,‘<‘,‘<‘,‘<‘,‘<‘,‘>‘,‘=‘}    };    charopt[7]={‘+‘,‘-‘,‘*‘,‘/‘,‘(‘,‘)‘,‘=‘};    intm,n,i;    for(i=0;i<7;i++)    {        if(c==opt[i])        {            m=i;        }        if(d==opt[i])        {            n=i;        }    } returnyouxian[m][n];} voidInitSqStack(SqStack &t){ t.base=(int*)(malloc(sizeof(int)*STACK_INIT_SIZE)); if(!t.base)   exit(1); t.top=t.base; t.size=STACK_INIT_SIZE;}   标签:blog http io color os ar for sp div
原文地址:http://www.cnblogs.com/lizhifeng/p/4057956.html