자료구조 후위표기법

자료구조 후위표기법

작성일 2020.04.01댓글 1건
    게시물 수정 , 삭제는 로그인 필요

(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);

}


#자료구조 후위표기법 #자료구조 후위표기법 계산 #자료구조 중위표기법 후위표기법

profile_image 익명 작성일 -

우선 제가 말씀드릴 수 있는 몇가지 문제점은

1. 계산 함수 eval 이 float 인데 printf 문에서 %d 로 사용되었다 -> %f로 바꾼다.

2. 계산 함수 eval 에서 op1과 op2가 int 값이기 때문에 ch가 / 일때 정수 / 정수 연산이 된다.

이 정도가 되겠습니다.

(3*4-1)/(5+(7+2*4)) 를 %d로 출력해보면 0이 나오는 게 맞습니다.

위 두가지를 고치거나 다른 연산을 해보세요

c언어 자료구조 후위표기법 문제 답

사진 후위표기 변환시 답좀 알려줄수있나요 ABCD/E%F*G/*+H- 사실 괄호가 맞지 않아서 에러예요. 3) A(-B)-C+ 4) AB+D*EFAD*+/+C+ 5) ABC<CD>||!&&!CE<|| 보통 단항연산자는 별도의...

자료구조 후위표기법 전환 질문이요!!

자료구조를 배우고있는데 표기법이 너무 헷갈려서 질문드립니다 ㅠㅠ 전위표기인 *+AB-CD를 후위표기법으로 바꾸면 어떻게 되나요~?? 풀이도 알려주시면...

자료구조 후위표기법

(3*4-1)/(5+(7+2*4))를 후위 표기 수식으로... exit(1); } else return s->stack[s->top]; } //후위 표기... printf ("후위표기식은 34*1-5724*++/ \n"); result...

[자료구조]전위,중위,후위 표기법...

자료구조책을봐도 모가몬지 모르겠습니다. 전위법,중위법,후위법 감도안잡히고 전위법은뭐 연산자를... 컴퓨터가 다항식을 계산하기 위해서는 중위표기법을 쓸수 없기때문에...

자료구조 후위표기법 이거...

1. A ^ B - C*D 2. A*(B-C)*D/E 3. A-B*D+E/(F+G)-H 후위표기법으로 어떻게나타내나요 ?? 1. A B ^ C D * - 2. A B C - * D * E / 3. A B D * - E F G + / + H - 가 됩니다.

자료구조 후위표기법 질문이요

(A+B)*(C-D)**E*F 이거 계산해서 후위로 표기하면 AB+CD-^E*F* 이거 맞나요?? 확인부탁드립니다. (AB+)*(CD-)^E*F = (AB+)*(CD-E^)*F = (AB+CD-E^*) * F = AB+CD-E^*F* 네...

c 자료구조 중위표기법->후위표기법

c 자료구조 중위표기법->후위표기법 수식 변환예제중 궁금한것 여기서 src 와 dst 는 스택인가요? 스택이아니면 괄호를 포함한 수식을 어떻게 저장하죠? src 와 dst 는...