#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 |