후위 표기 수식 계산
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_STACK_SIZE 100
typedef char element;
typedef struct {
element data[MAX_STACK_SIZE];
int top;
}StackType;
void init(StackType* s) {
s->top = -1;
}
int is_full(StackType* s) {
return (s->top == MAX_STACK_SIZE - 1);
}
int is_empty(StackType* s) {
return (s->top == -1);
}
void push(StackType* s, element item) {
if (is_full(s)) {
fprintf(stderr, "스택 포화 에러");
return;
}
else s->data[++(s->top)] = item;;
}
element pop(StackType* s) {
if (is_empty(s)) {
fprintf(stderr, "스택 공백 에러");
exit(1);
}
else return s->data[(s->top)--];
}
element peek(StackType* s) {
if (is_empty(s)) {
fprintf(stderr, "스택 공백 에러");
exit(1);
}
else return s->data[(s->top)];
}
2024.07.22 - [Algorithm] - 스택 (stack)
스택 (stack)
스택은 후입선출의 입출력형태를 나타낸다. (Last-in, First-out)ADT 추상 자료형으로 스택을 나타내면 다음과 같다.객체: 0개 이상의 원소를 가지는 유한 선형 리스트연산:create(size) ::= 최대 크기가 siz
kwone.tistory.com
int eval(char exp[])
{
int op1, op2,value,i=0;
char ch;
int len = strlen(exp);
StackType s;
init(&s);
for ( i = 0; i < len; i++) {
ch = exp[i];
if (ch != '+' && ch != '-' && ch != '/' && ch != '*') {
value = ch - '0'; //ch가 피연산자인 경우
push(&s, value);
}
else {
op2 = pop(&s);
op1 = pop(&s);
switch (ch) {
case'+':push(&s, op1 + op2); break;
case'-':push(&s, op1 - op2); break;
case'*':push(&s, op1 * op2); break;
case'/':push(&s, op1 / op2); break;
}
}
}
return pop(&s);
}
int main() {
int result;
printf("후위표기식은 82/3-32*+\n");
result = eval("82/3-32*+");
printf("결과값은 %d\n", result);
return 0;
}
'DSA' 카테고리의 다른 글
큐(Queue) 2 (0) | 2024.08.22 |
---|---|
스택(Stack) 활용 예제 3 (0) | 2024.08.21 |
스택(Stack) 활용 예제 1 (0) | 2024.08.21 |
스택(Stack) 2 (0) | 2024.08.19 |
순환 (하노이 탑) (0) | 2024.07.28 |