C
[C] 264 스택구현
qkrwngus
2021. 2. 17. 19:06
Desc :
자료를 저장하기 위해 사용되는 알고리즘 중 하나 - 스택
Last-In-First-Out
맨 나중에 저장한 데이터가 가장 먼저 나옴
Source Code :
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int push(int value); // 데이터 삽입
int pop(int *value); // 데이터 꺼내기
#define STACK_MAX 100 // 스택의 최대 크기
typedef struct tagStack // 스택 구조체 선언
{
int array[STACK_MAX];
int top;
int bottom;
}STACK;
STACK s;
void main()
{
char buff[100], tmp[100];
char *op = "+-*/%";
int index;
int value1 = 0, value2 = 0;
s.top = -1;
puts("계산식을 1*2처럼 입력하고 엔터키를 치세요.");
puts("아무것도 입력하지 않으면 계산이 종료됩니다.");
for (;;)
{
printf("계산식: ");
gets(buff);
if (strlen(buff) == 0) break; // 종료
memset(tmp, 0, sizeof(tmp)); // tmp버퍼 NULL값으로 채우기 --> atoi함수에서 문자열 끝 확인
index = strcspn(buff, op); // 연산자가 있는 위치 반환
memcpy(tmp, buff, index); // tmp에 buff를 index 크기만큼 복사
value1 = atoi(tmp);
value2 = atoi(&buff[index + 1]); // index다음부터 문자열을 정수로 변환
switch (buff[index])
{
case'+':
value1 += value2;
break;
case'-':
value1 -= value2;
break;
case'*':
value1 *= value2;
break;
case'/':
value1 /= value2;
break;
case'%':
value1 %= value2;
break;
default:
puts("잘못된 연산자를 사용하였습니다.");
continue;
}
if (push(value1) == STACK_MAX)
{
puts("더 이상 저장할 수 없습니다."); // overflow
}
printf("%s = %d. s.top = %d \n\n", buff, value1, s.top);
}
value1 = 0;
for (;;)
{
if (pop(&value2) == -1) break; // underflow
value1 += value2;
}
printf("계산의 총합은 %d입니다.\n", value1);
}
int push(int value)
{
if (s.top == STACK_MAX) return -1; // 삽입 할 수 없음
s.array[++s.top] = value;
return 0;
}
int pop(int *value)
{
if (s.top == -1) return -1; // 꺼낼 값이 없음
*value = s.array[s.top--];
return 0;
}
Result :