- 개발자 : 나휘동
- 스택을 이용
- 문제점 : 연산자가 출력 안 됨
stack.h
~cpp
#ifndef __STACK__H__
#define __STACK__H__
typedef struct{
char token;
int precedence;
}Operator;
const int LEN = 4;
Operator operators[LEN] = {
{'+', 12},
{'-', 12},
{'*', 13},
{'/', 13}
};
typedef struct{
Operator op;
}Element;
const int MAX = 10;
Element stack[MAX];
int top = -1;
bool isFull()
{
return (top < MAX - 1 ? false : true);
}
bool isEmpty()
{
return (top < 0 ? true : false);
}
Element push(int * top, Element aItem)
{
if ( *top < MAX - 1 )
stack[++*top]= aItem;
return stack[*top];
}
Element pop(int * top)
{
if ( *top < 0 )
return stack[*top];
return stack[--*top--];
}
#endif
main.cpp
~cpp
#include <iostream.h>
#include <cstring>
#include "stack.h"
void toPostFix(char aTerm[]);
bool isOperand(char aToken);
Operator toOperator(char aToken);
void main()
{
char term[] = "2*3+4";
toPostFix(term);
}
void toPostFix(char aTerm[])
{
int len = strlen(aTerm);
Element income;
/*income.op.token = 'b';
income.op.precedence = 0;
push(top, income);
stack[MAX-1].op.token = 'e';
stack[MAX-1].op.precedence = 100;*/
for ( int i = 0 ; i < len ; i++ )
{
if ( isOperand(aTerm[i]) )
cout << aTerm[i];
else{
income.op = toOperator(aTerm[i]);
if ( income.op.precedence < stack[top].op.precedence )
cout << pop(&top).op.token;
push(&top, income);
}
}
/*while (!isEmpty())
cout << pop(&top).op.token;*/
}
bool isOperand(char aToken)
{
for ( int i = 0 ; i < LEN ; i++ )
if ( operators[i].token == aToken )
return false;
return true;
}
Operator toOperator(char aToken)
{
for ( int i = 0 ; i < LEN ; i++ )
if ( operators[i].token == aToken )
return operators[i];
}