자료구조 후위표기식 구현

자료구조 후위표기식 구현

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

int main()

    int result;
    printf("중위표기식 : ");
    scanf("%s", word);
    infix_to_postfix(word);
    printf("후위표기식 : %s\n", data);
    result = eval(data);
    printf("결과값 : %d\n", result);
    system("pause");
    return 0;
}



이 메인함수 실행될수 있게 ;;;


알고리즘좀 부탁드립니다


아무렇게나도 됩니다


구동만 되게해주세요 급합니다

  


#자료구조 후위표기식

profile_image 익명 작성일 -

#include <stdio.h>
#include <stdlib.h>
#include<string.h>
#define MAX_STACK_SIZE 100
char data[100]={0,};
char word[100];

typedef char 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");
        return;
    }
    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];
}
int prec(char op) {
    switch(op){
        case '(': case ')': return 0;
        case '+': case '-': return 1;
        case '*': case '/': return 2;
    }
    return -1;
}
void infix_to_postfix(char exp[]) {
    int i=0, j=0;
    char ch, top_op, cx;
    int len = strlen(exp);
    StackType s;
    init(&s);
    for(i=0; i<len; i++){
        ch = exp[i];
        switch(ch){
            case '+': case '-': case '*': case '/':
                while( !is_empty(&s) && (prec(ch) <= prec(peek(&s)))) {
                    cx=pop(&s);
                    data[j++]=cx;
                }
                push(&s, ch);
                break;
            case '(':
                push(&s, ch);
                break;
            case ')':
                top_op = pop(&s);
                while( top_op != '('){
                    data[j++]=top_op;
                    top_op = pop(&s);
                }
                break;
            default:
                data[j++]=ch;
                break;
         }
    }
    while( !is_empty(&s)) {
        cx=pop(&s);
        data[j++]=cx;
    }
}
int eval(char exp[]) {
    int op1, op2, value, i=0;
    int len = strlen(exp);
    char ch;
    StackType s;
    init(&s);
    for(i=0;i<len;i++) 
        if('0'<=exp[i]&&exp[i]<='9') 
            exp[i]=exp[i]-'0';
    for( i=0; i<len; i++){
       ch = exp[i];
       if( ch != '+' && ch != '-' && ch != '*' && ch != '/'){
          push(&s, ch);
       }
       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);
}
int main() {
    int result;
    printf("중위표기식: ");
    scanf("%s", word);
    infix_to_postfix(word);
    printf("후위표기식 : %s\n", data);
    result = eval(data);
    printf("결과값: %d\n", result);

    return 0;
}

자료구조 후위표기식 구현

... printf("후위표기식 : %s\n", data); result = eval(data); printf("결과값 : %d\n", result); system("pause"); return 0; } 이 메인함수 실행될수...

c언어로 자료구조 독학하는데

... 보통 해당 자료구조를 이해하고 구현하는데 중점을 두기에 구현력을 기르는 훈련입니다. 2. 후위 표기식에 최적화된 코드를 보면서 공부하시면 이해도 빠르게되고 좋죠...

진짜 이걸 풀어주실수 있는 분이 한명도...

... 어쨌든 프로그램을 만드는데 전위표기법, 후위표기법... C언어 자료 구조를 배우는 과정에서 전위 표기법에... 전위 표기식을 "배우기만"한 것을 C 프로그램으로 구현하라...

엄청 쉬운 씨언어 입니다 고수님들...

... 이것을 재귀로 구현할수 있다면 편할것 같내욤. 2번째 방법은 자료구조 책의 중위표기식후위표기식에 대한 기술이 나와있습니다. 방법은 중위 표기식후위...

자료구조 질문있습니다.

... 다음 식을 후위 표기식으로 변환하라. (F+A*B)/E-(A+B)*D+C 2. 크기가 5인... 데크를 구현하기 위하여 알맞은 자료구조를 적어라 FAB*+E/AB+D*-C+ [E][F][G]...

C# 질문이요 ㅠ

... 어떻게 구현해야 할지 모르겠어요 ㅠ 알려주실분 ㅠ... 표기식으로 변환하여 계산하는 것이 편합니다. 중위식 -> 후위식 변환을 위해서는 자료 구조...