#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct Stack
{
int Data;
struct Stack * BeforeStack;
}Stack;
Stack *Top = NULL;
int Push(int Data)
{
Stack * StackData = (Stack *)calloc(1,sizeof(Stack));
if(StackData == NULL) exit(0);
StackData->Data = Data;
StackData->BeforeStack = NULL;
if(Top == NULL) Top = StackData;
else
{
StackData->BeforeStack = Top;
Top = StackData;
}
return 1;
}
int Pop(void)
{
int Data = 0;
if(Top == NULL)
{
printf("Not Data!!\n");
exit(0);
}
Data = Top->Data;
Top = Top->BeforeStack;
return Data;
}
int eval(char * String)
{
int cCount = 0;
int nData = 0;
int Number = 0;
int * Data = 0;
int PopData1 = 0;
int PopData2 = 0;
cCount = strlen(String);
for(Number=0; Number < cCount; Number++,String++)
{
if((*String) != '+' && (*String) != '-' && (*String) != '*' && (*String) != '/' )
{
nData = (*String) - '0';
if(Push(nData)) printf("Push Succese!\n");
}
else
{
PopData2 = Pop();
PopData1 = Pop();
switch(*String)
{
case '+':
if(Push(PopData1+PopData2)) printf("Push Succese!\n");
break;
case '-':
if(Push(PopData1-PopData2)) printf("Push Succese!\n");
break;
case '*':
if(Push(PopData1*PopData2)) printf("Push Succese!\n");
break;
case '/':
if(Push(PopData1/PopData2)) printf("Push Succese!\n");
break;
}
}
}
return Pop();
}
void main()
{
int result = 0;
printf("후위 표기식은 82/3-32*+\n");
result = eval("82/3-32*+");
printf("result : %d\n",result);
}
Top 구조체 포인터 변수가 상위를 가르킵니다~ 이를 이용하여 Push 함수에서 스택을 쌓고 POP 함수에서 스택을 꺼내는 구조입니다.
'Soft Ware > 자료구조 및 알고리즘' 카테고리의 다른 글
정렬 !! -선택정렬- (0) | 2012.04.16 |
---|---|
유클리드 호제법을 이용한 최대공약수 구하기 (0) | 2012.04.16 |
중위 순위를 후위순위로 바꾸는 소스입니다 (0) | 2012.04.15 |
원형 리스트 !!! (0) | 2011.08.09 |
연결리스트 한번 공부해보자!!! (0) | 2011.08.08 |