C 언어: 접미사 표현 식 을 접미사 표현 식 으로 변환 하고 결 과 를 계산 합 니 다.
4046 단어 데이터 구조
이 코드 심각 해 BUG!!!
이 코드 심각 해 BUG!!!
중요 한 얘 기 세 번!!!!
다음으로 이동 하 십시오: C 언어 과목 설정: 접미사 표현 식 접미사 표현 식 을 바 꾸 고 값 을 구 합 니 다 (계속)
#include
#include
#include
#include
#define ElemType int
using namespace std;
typedef struct Stack{
ElemType * base;
ElemType * top;
int stacksize;
}SqStack;
int In_Op(char a); //
int Pop(SqStack * S,ElemType e); //
int GetTop(SqStack * S,ElemType e); //
int CreateStack(SqStack * S); //
int Push(SqStack * S,ElemType e); //
void CreateExpression(char * str); //
char * TransmitExpression(char * a);//
int Is_Pop(char x,char y); //
ElemType EvaluateExpression(char *a);//
ElemType Theta(int l,char m,int r); //
int main(){
char str[30];
char s_str[30];
CreateExpression(str);
strcpy(s_str,TransmitExpression(str));
cout<base = (ElemType *)malloc(sizeof(SqStack)*10);
if(!S->base) exit(-1);
S->top = S->base;
S->stacksize = 10;
return 1;
}
//
ElemType GetTop(SqStack * S){
if(S->top == S->base)
return 0;
return *(S->top-1);
}
//
int Push(SqStack * S,ElemType e){
if((S->top-S->base)>=S->stacksize){
S->base = (ElemType *)realloc(S->base,(S->stacksize+5)*sizeof(SqStack));
if(!S->base)
exit(-1);
S->top = S->base + S->stacksize;
S->stacksize +=5;
}
*S->top=e;
S->top++;
return 1;
}
//
int Pop(SqStack * S,ElemType * e){
if(S->top==S->base)
return 0;
*e = *(--S->top);
return 1;
}
//
void CreateExpression(char * str){
gets(str);
}
//
int In_Op(char a){
switch(a){
case '+' : return 1;
case '-' : return 1;
case '*' : return 1;
case '/' : return 1;
case '(' : return 1;
case ')' : return 1;
case '#' : return 1;
default:return 0;
}
}
/*
:
:
:
*/
char * TransmitExpression(char * a){
int i,j=0;
char b[20]={0};
SqStack OPTR;
ElemType e;
CreateStack(&OPTR);
Push(&OPTR,'#');
for(i=0;a[i];i++){
if(!In_Op(a[i])){
b[j++]=a[i];// b
}else{
if(GetTop(&OPTR)=='#'){
Push(&OPTR,a[i]); // , 。
continue;
}
if(Is_Pop(GetTop(&OPTR),a[i])){ //
if(a[i]==')'){ //
while(GetTop(&OPTR)!='('){
Pop(&OPTR,&e); // b
b[j++]=(char)e;
}
Pop(&OPTR,&e); //
}else{ //
while(GetTop(&OPTR)!='#'){//
Pop(&OPTR,&e);
b[j++]=(char)e;
}
Push(&OPTR,a[i]);//
}
}else{
Push(&OPTR,a[i]); // ,
//
}
}
}
// ,
while(GetTop(&OPTR)!='#'){
Pop(&OPTR,&e);
b[j++]=(char)e;
}
// ,
char * result = (char *)malloc(sizeof(char)*20);
strcpy(result,b);// b
return result;
}
// ,
/*
+ - * / ( )
+ 1 1 0 0 0 1
- 1 1 0 0 0 1
* 1 1 0 0 0 1
/ 1 1 1 1 0 1
( 0 0 0 0 0 0
) 1 1 1 1 1 1
*/
int Is_Pop(char x,char y){
if(x=='(')
return 0;
if(y=='('&&x!=')')
return 0;
if(y=='*'||y=='/'){
if(x=='+'||x=='-')
return 0;
}
return 1;
}
//
ElemType EvaluateExpression(char *a){
int i;
ElemType l,r,e;
SqStack OPND;
CreateStack(&OPND);
for(i=0;a[i];i++){
if(!In_Op(a[i])){
Push(&OPND,int(a[i]-48));
}else{
Pop(&OPND,&r);
Pop(&OPND,&l);
Push(&OPND,Theta(l,a[i],r));
}
}
return GetTop(&OPND);
}
//
ElemType Theta(int l,char m,int r){
switch(m){
case'+': return l+r;
case'-': return 1-r;
case'*': return l*r;
case'/': return l-r;
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.