본문 바로가기
프로그래머의 길/알고리즘

후위식 계산기

by 제이콥케이 2007. 3. 30.
반응형

#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>

#define MAX 100

int integer(char *);
void push(int);
int pop();
int *ptr, *top, *bottom;

void main()
{
 int op1, op2;
 char str[81];
// int *i;

 ptr = (int *)malloc(MAX*sizeof(int));
 top = ptr;
 bottom = ptr+MAX-1;

// printf("%d  ", top);
// printf("%d", bottom);

 printf("후위식 입력 : ");
 do
 {  
  scanf("%s", str);
  switch(*str)
  {
  case '+':
   op2 = pop();
   op1 = pop();
   push(op1 + op2);
   break;

  case '-':
   op2 = pop();
   op1 = pop();
   push(op1 - op2);
   break;

  case '*':
   op2 = pop();
   op1 = pop();
   push(op1 * op2);
   break;

  case '/':
   op2 = pop();
   op1 = pop();
   if(op2 == 0)
   {
    printf("Error : Divide by 0 \n");
    exit(1);
   }
   else
    push(op1 / op2);
   break;

  case '=':
   printf("   The result : %d\n\n", pop());
   printf("후위식 입력 : ");
    break;

  default:
   push(integer(str));
  }
/*
// 스택 확인

  for(i=top; i<ptr; i++)
   printf("%d  ", *i);

  printf("\n");
*/
 }while(*str != 'q' && *str != 'Q');
}

void push(int item)
{
 if(ptr > bottom)
 {
  printf("Stack overflow\n");
  exit(1);
 }
 else
  *ptr++=item;
}

int pop()
{
 ptr--;
 if(ptr < top)
 {
  printf("Stack underflow\n");
  exit(1);
 }
 else
  return *ptr;
}

int integer(char *str)
{
 int i, num=0;
 
 for(i=0; str[i]>='0' && str[i] <= '9'; i++)
 {
  num *= 10;
  num += str[i]-'0';   // num += atoi(str[i]);  동일
 }
 return num;
}

반응형

'프로그래머의 길 > 알고리즘' 카테고리의 다른 글

버블 정렬 구현  (0) 2007.04.02
버블 정렬(Bubble Sort)  (0) 2007.04.02
원형 큐 구현 소스  (0) 2007.03.29
스택 예제 소스  (0) 2007.03.29
스택과 큐, 데크  (0) 2007.03.29