자료구조 후위표기법
-
게시물 수정 , 삭제는 로그인 필요
(3*4-1)/(5+(7+2*4))를 후위 표기 수식으로 바꾸면 34*1-5724*++/ 아닌가요?
코드 돌려봤는데 계속 0이 나오네요ㅜ
밑에는 제가 만든 코드입니다
#include <stdio.h>
#define MAX_STACK_SIZE 100
typedef int element;
typedef struct {
element stack[MAX_STACK_SIZE];
int top;
}StackType;
//스택 초기화 함수
void init(StackType * s)
{
s->top = -1;
}
//공백상태 검출 함수
int is_empty(StackType *s)
{
return (s->top == -1);
}
//포화 상태 검출 함수
int is_full(StackType *s)
{
return (s->top == (MAX_STACK_SIZE - 1));
}
//삽입함수
void push(StackType*s, element item)
{
if (is_full(s)) {
fprintf(stderr, "스택 포화 에러 \n");
exit(1);
}
else s->stack[++(s->top)] = item;
}
//삭제 함수
element pop(StackType *s)
{
if (is_empty(s)) {
fprintf(stderr, "스택 공백 에러 \n");
exit(1);
}
else return s->stack[(s->top)--];
}
//피크함수
element peek(StackType*s)
{
if (is_empty(s)) {
fprintf(stderr, "스택 공백 에러 \n");
exit(1);
}
else return s->stack[s->top];
}
//후위 표기 수식 계산함수
float eval(char exp[])
{
StackType s;
int op1, op2, value, i = 0;
int len = strlen(exp);
char ch;
init(&s);
for (i = 0; i < len; i++) {
ch = exp[i];
if (ch != '+' && ch != '-'&& ch != '*'&&ch != '/')
{
value = ch - '0';
push(&s, value);
}
else {
op2 = pop(&s);
op1 = pop(&s);
switch (ch) {
case '+': push(&s, op1 + op2); break;
case '-': push(&s, op1 - op2); break;
case '*': push(&s, op1 * op2); break;
case '/': push(&s, op1 / op2); break;
}
}
}
return pop(&s);
}
void main()
{
float result;
printf ("후위표기식은 34*1-5724*++/ \n");
result = eval("34*1-5724*++/");
printf ("결과값은 %d \n", result);
}
(3*4-1)/(5+(7+2*4))를 후위 표기 수식으로 바꾸면 34*1-5724*++/ 아닌가요?
코드 돌려봤는데 계속 0이 나오네요ㅜ
밑에는 제가 만든 코드입니다
#include <stdio.h>
#define MAX_STACK_SIZE 100
typedef int element;
typedef struct {
element stack[MAX_STACK_SIZE];
int top;
}StackType;
//스택 초기화 함수
void init(StackType * s)
{
s->top = -1;
}
//공백상태 검출 함수
int is_empty(StackType *s)
{
return (s->top == -1);
}
//포화 상태 검출 함수
int is_full(StackType *s)
{
return (s->top == (MAX_STACK_SIZE - 1));
}
//삽입함수
void push(StackType*s, element item)
{
if (is_full(s)) {
fprintf(stderr, "스택 포화 에러 \n");
exit(1);
}
else s->stack[++(s->top)] = item;
}
//삭제 함수
element pop(StackType *s)
{
if (is_empty(s)) {
fprintf(stderr, "스택 공백 에러 \n");
exit(1);
}
else return s->stack[(s->top)--];
}
//피크함수
element peek(StackType*s)
{
if (is_empty(s)) {
fprintf(stderr, "스택 공백 에러 \n");
exit(1);
}
else return s->stack[s->top];
}
//후위 표기 수식 계산함수
float eval(char exp[])
{
StackType s;
int op1, op2, value, i = 0;
int len = strlen(exp);
char ch;
init(&s);
for (i = 0; i < len; i++) {
ch = exp[i];
if (ch != '+' && ch != '-'&& ch != '*'&&ch != '/')
{
value = ch - '0';
push(&s, value);
}
else {
op2 = pop(&s);
op1 = pop(&s);
switch (ch) {
case '+': push(&s, op1 + op2); break;
case '-': push(&s, op1 - op2); break;
case '*': push(&s, op1 * op2); break;
case '/': push(&s, op1 / op2); break;
}
}
}
return pop(&s);
}
void main()
{
float result;
printf ("후위표기식은 34*1-5724*++/ \n");
result = eval("34*1-5724*++/");
printf ("결과값은 %d \n", result);
}
#자료구조 후위표기법 #자료구조 후위표기법 계산 #자료구조 중위표기법 후위표기법