접미사 표현 식 에서 접 두 사 를 구하 고 접미사 표현 식 에서 값 을 구하 십시오.

2588 단어
사람: 접미사 표현 식
컴퓨터: 접미사 식
접미사 접 두 사 를 돌려 계산 해 야 합 니 다.어느 단계 든 스 택 이 필요 합 니 다.
에 대해 (3 + 4)× 5 - 6
접미사
관련 된 스 택 은 '+ -' 와 같은 기 호 를 저장 하 는 데 사 용 됩 니 다.× / ( )”
생각:
디지털 출력 만 나 기;기호 가 창고 에 들 어 오 는 것 을 만나다
빈 창고 나 기호 가 왼쪽 괄호 일 때 바로 창고 에 들 어가 기;
연산 자 일 때 스 택 에 들 어 갈 기 호 는 스 택 내 기호 보다 커 야 합 니 다. 현재 스 택 내 에서 이 연산 자 보다 크 거나 같은 스 택 에서 출력 한 다음 에 스 택 에 들 어 갑 니 다.
연산 자가 오른쪽 괄호 일 때, 첫 번 째 왼쪽 괄호 기호 가 창고 에서 나 올 때 까지, 괄호 가 아 닌 기 호 를 출력 합 니 다.
알고리즘:
//            
void mid2after(char *a, char *&b){
int l=strlen(a);
int i=0,j=0;
sqstack s;
initstack(s);
while(i<l&&s.top>=-1){
if(a[i]>='0'&&a[i]<='9'){b[j++]=a[i++];if(a[i]<'0'||a[i]>'9')b[j++]=' ';}
else{
if(s.top==-1||a[i]=='(')s.data[++s.top]=a[i++];
else if(a[i]=='*'||a[i]=='/'){while(s.data[s.top]=='*'||s.data[s.top]=='/'){b[j++]=s.data[s.top--];}s.data[++s.top]=a[i++];}
else if(a[i]=='+'||a[i]=='-')
{while(s.data[s.top]=='+'||s.data[s.top]=='-'||s.data[s.top]=='*'||s.data[s.top]=='/'){b[j++]=s.data[s.top--];}  
    s.data[++s.top]=a[i++];}
else if(a[i]==')'){i++;while(s.data[s.top]!='('){b[j++]=s.data[s.top--];}
s.top--;}
else if(a[i]==' ')i++;
else {cout<<"inlegal input!";return;}
}
}
while(s.top>-1){b[j++]=s.data[s.top--];}
}

접미사 값 구하 기
접미사 식 값 스 택 은 주로 값 을 저장 하 는 데 사 용 됩 니 다.
생각:
숫자 를 만 날 때마다 스 택 에 들 어 갑 니 다.
연산 자 를 만 나 면 바로 창고 에서 나 오기 두 자리 연산 을 하고, 결 과 는 다시 창고 에 들어간다.
접미사 표현 식 나무 에 괄호 가 있 습 니 다.
알고리즘:
//    
int get_after(char *b){
int l=strlen(b);
sqstack s;
initstack(s);
int i=0,ss;
while(i<l&&s.top>=-1){
 if(b[i]>='0'&&b[i]<='9'){
     ss=0;
while(b[i]>='0'&&b[i]<='9')
{ 
    int j=1;
    j=(b[i]-'0');
    ss=ss*10+j;
     i++;
    // cout<<ss<<" ";
}
   s.data[++s.top]=ss;
}
else {int t=s.data[s.top];
    switch (b[i])
    {case '+':s.data[--s.top]=s.data[s.top]+t;break;
     case '-':s.data[--s.top]=s.data[s.top]-t;break;
     case '*':s.data[--s.top]=s.data[s.top]*t;break;
     case '/':{if(t==0)return -100;s.data[--s.top]=s.data[s.top]/t;break;
              }
     case ' ':break;
    default:{cout<<"error! "<<b[i];return -100;}
    }
    i++;}
}
if(s.top>-1)return s.data[s.top];
}

좋은 웹페이지 즐겨찾기