산술 식 변환 2484 SDUT
Time Limit: 1000 ms Memory Limit: 65536 KiB
Submit Statistic Discuss
Problem Description
샤 오 밍 은 데이터 구 조 를 공부 한 후에 예전 에 해결 하지 못 했 던 산술 표현 식 이 접미사 식 으로 바 뀌 었 던 문제 가 갑자기 생각 났 다. 오늘 은 그 가 해결 하고 싶 어 한다.
데이터 구조의 기초 가 있 기 때문에 샤 오 밍 은 곧 이 문 제 를 풀 었 다. 그러나 그 는 갑자기 산술 식 의 접두사 식 과 접두사 식 을 어떻게 구 해 야 할 지 생각 했다.샤 오 밍 은 매우 곤혹스럽다.똑똑 한 니 가 해결 해 줘.
Input
산술 표현 식 을 입력 하 십시오. \ \ # \ 문 자 를 끝 표지 로 합 니 다.(데 이 터 는 빈 칸 이 없고 한 그룹 만 입력 할 수 있 습 니 다)
Output
이 표현 식 을 출력 하여 얻 은 접두사 접두사 식 접 두 사 를 변환 합 니 다.세 줄 로 나 누 어 출력 하고 순 서 는 접두사 식 접두사 식 입 니 다.
Sample Input
a*b+(c-d/e)*f#
Sample Output
+*ab*-c/def
a*b+c-d/e*f
ab*cde/-f*+
Hint
Source
방법 1:
#include
#include
char a[1000],ls[1000], la[1000];
int cmp(char z)
{
if(z == '+' || z == '-') return 1;
if(z == '*' || z == '/') return 2;
if(z == ')') return 3;
if(z == '(') return 4;
}
int main()
{
scanf("%s",a);
int i = 0,k = 0, c = 0;
int str = strlen(a);
str = str - 2;
while(str >= 0)
{
if(a[str] >= 'a' && a[str] <= 'z')
{
la[c++] = a[str];
}
else
{
if(k == 0 )
{
ls[k++] = a[str];
}
else
{
if(cmp(ls[k-1]) <= cmp(a[str]))
{
if(a[str] == '(')
{
k = k - 1;
for(; ls[k] != ')'; k--)
{
la[c++] = ls[k];
}
}
else
{
ls[k++] = a[str];
}
}
else
{
if(ls[k-1] != ')')
{
la[c++] = ls[k-1];
ls[k-1] = a[str];
}
else
ls[k++] = a[str];
}
}
}
str--;
}
c = c- 1;
for(i = 0; i < k; i++)
{
printf("%c",ls[i]);
}
for(; c >= 0; c--)
printf("%c",la[c]);
printf("
");
for(i = 0; a[i] != '#'; i++)
{
if(a[i] != '(' && a[i] != ')')
{
printf("%c",a[i]);
}
}
printf("
");
k = 0;
memset(ls,0,sizeof(ls));
for(i = 0; a[i] != '#'; i++)
{
if(a[i] >= 'a' && a[i] <= 'z')
{
printf("%c",a[i]);
}
else
{
if(k == 0)
{
ls[k++] = a[i];
}
else
{
if(cmp(ls[k-1]) >= cmp(a[i]))
{
if(ls[k-1]!= '(')
{
printf("%c",ls[k-1]);
ls[k-1] = a[i];
}
else
{
ls[k++] = a[i];
}
}
else
{
if(a[i] == ')')
{
k = k-1;
for(; ls[k]!='('; k--)
{
printf("%c",ls[k]);
}
}
else
{
ls[k++] = a[i];
}
}
}
}
}
k = k - 1;
while(k>=0)
{
printf("%c",ls[k]);
k--;
}
printf("
");
return 0;
}
방법 2:
#include
#include
struct node
{
char s;
struct node *l,*r;
};
char sa[100],sb[100],sc[100];
int p;
void first(struct node *q)
{
if(q==NULL)
{
return ;
}
printf("%c",q->s);
first(q->l);
first(q->r);
}
void infix(struct node *q)
{
if(q==NULL)
{
return ;
}
infix(q->l);
printf("%c",q->s);
infix(q->r);
}
void postfix(struct node *q)
{
if(q==NULL)
{
return ;
}
postfix(q->l);
postfix(q->r);
printf("%c",q->s);
}
void h()
{
int x=0,y=0;
for(p=0; sa[p]!='#'; p++)
{
if(sa[p]>='a'&&sa[p]<='z')///
{
sb[x]=sa[p];
x++;
}
else if(sa[p]=='+'||sa[p]=='-')
{
while(y!=0&&sc[y-1]!='(')
{
sb[x]=sc[y-1];
x++;
y--;
}
sc[y]=sa[p];
y++;
}
else if(sa[p]=='*'||sa[p]=='/')
{
while(y!=0&&(sc[y-1]=='*'||sc[y-1]=='/'))
{
sb[x]=sc[y-1];
x++;
y--;
}
sc[y]=sa[p];
y++;
}
else if(sa[p]=='(')
{
sc[y]=sa[p];
y++;
}
else if(sa[p]==')')
{
while(sc[y-1]!='(')
{
sb[x]=sc[y-1];
x++;
y--;
}
y--;
}
}
while(y!=0)
{
sb[x]=sc[y-1];
x++;
y--;
}
sb[x]='\0';
}
int main()
{
int d=0,i;
scanf("%s",sa);
h();
struct node *po[100]={NULL},*pi;
for(i=0;i='a'&&sb[i]<='z')
{
pi=(struct node *)malloc(sizeof(struct node));
pi->s=sb[i];
pi->l=NULL;
pi->r=NULL;
po[d]=pi;
d++;
}
else
{
pi=(struct node *)malloc(sizeof(struct node));
pi->s=sb[i];
pi->r=po[d-1];
d--;
pi->l=po[d-1];
d--;
po[d]=pi;
d++;
}
}
first(po[0]);
printf("
");
infix(po[0]);
printf("
");
postfix(po[0]);
printf("
");
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.