[데이터 구조] 접미사 표현 식 전환 접미사 표현 식 (역 폴란드 식)
7333 단어 데이터 구조 와 알고리즘
#include
#include
#include "stack.h"
#define MaxSize 30
int Judge(int flag,char operater)
{
if(flag)
switch(operater){
case '+': return 3;
case '-': return 3;
case '*': return 5;
case '/': return 5;
case '(': return 1;
case ')': return 6;
}
else
switch(operater){
case '+': return 2;
case '-': return 2;
case '*': return 4;
case '/': return 4;
case '(': return 6;
case ')': return 1;
}
}
void RPN(char *a)
{
int i = 0, j = 0;
char b[MaxSize];
LinkStack *Stack;
Stack = CreateStack();
while(a[i]){
if(a[i] >= '0' && a[i] <= '9'){
b[j++] = a[i];
i++;
continue;
}
while( !IsEmpty(Stack) && Judge(0,a[i]) < Judge(1,Stack->Next->Date))
b[j++] = Pop(Stack);
if(IsEmpty(Stack)){
Push(Stack,a[i]);
i++;
continue;
}
else if(Judge(0,a[i]) > Judge(1,Stack->Next->Date))
Push(Stack,a[i]);
else if(Judge(0,a[i]) == Judge(1,Stack->Next->Date))
Pop(Stack);
i++;
}
while(!IsEmpty(Stack))
b[j++] = Pop(Stack);
b[j] = '\0';
puts(b);
}
int main()
{
char a[MaxSize];
gets(a);
RPN(a);
return 0;
}
다음은 헤더 파일 "stack. h" 입 니 다.
#ifndef STACK_H_INCLUDED
#define STACK_H_INCLUDED
typedef struct Node{
char Date;
struct Node *Next;
} LinkStack;
LinkStack *CreateStack()
{
LinkStack *S;
S = (LinkStack*)malloc(sizeof(struct Node));
S->Next = NULL;
return S;
}
int IsEmpty(LinkStack *S)
{
return(S->Next == NULL);
}
void Push(LinkStack *S, char item)
{
LinkStack *TmpCell;
TmpCell = (LinkStack*)malloc(sizeof(struct Node));
TmpCell->Date = item;
TmpCell->Next = S->Next;
S->Next = TmpCell;
}
char Pop(LinkStack *S)
{
LinkStack *FirstCell;
char TopElem;
if(IsEmpty(S)){
printf("Stack is empty
");
return NULL;
}
else{
FirstCell = S->Next;
S->Next = FirstCell->Next;
TopElem = FirstCell->Date;
free(FirstCell);
return TopElem;
}
}
#endif // STACK_H_INCLUDED
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[JAVA] 배열 회전 출력요소 가 출력 을 시작 하 는 위치 에 주의 하 십시오. 모두 몇 라운드 의 수출 이 있 습 니까? n/2 + 1 매 라 운 드 는 상, 우, 하, 좌 로 나 뉜 다. 각 방향의 시작 위치 와 좌표 의 관 계 를 구...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.