직접만든거긔
아직 C 초보임 ㅎㅎ 부들부들
학교 과제임
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STACK_SIZE 100
typedef struct {
char e[MAX_STACK_SIZE];
}Equation;
typedef Equation 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;
}
char* c2s(char* s, char c){
s[0]=c;
s[1]=NULL;
return s;
}
void postfix_to_infix(char exp[])
{
int i;
int len=strlen(exp);
char ch,str[2],arr[MAX_STACK_SIZE]={0},arr2[MAX_STACK_SIZE]={0};
element temp;
StackType s;
init(&s);
for(i=0;i<len;i++)
{
ch=exp[i];
if(ch!='+' && ch!='-' && ch!='*' && ch!='/')
{
strcpy(temp.e,c2s(str,ch));
push(&s,temp);
}
else
{
temp=pop(&s);
strcpy(arr,temp.e);
if(!is_empty(&s))
{
strcpy(arr2,"(");
temp=pop(&s);
strcat(arr2,temp.e);
}
strcpy(temp.e,c2s(str,ch));
strcat(arr2,temp.e);
strcat(arr2,arr);
strcat(arr2,")");
strcpy(temp.e,arr2);
push(&s,temp);
strcpy(arr2,"");
strcpy(arr,"");
}
}
printf("%s\n",&s);
}
int main(void)
{
postfix_to_infix("12+7*");
return 0;
}
'갯힝의 일상' 카테고리의 다른 글
파오캐 오라 분석 (1) | 2014.06.26 |
---|---|
m16 버전오류 (0) | 2014.06.20 |
나랜디 2.7 심심해서 만든버전 (10) | 2013.08.17 |
밤에 할일 (7) | 2013.08.13 |
ㅠ.. 저 내일 생일임다. (21) | 2013.06.12 |