스택(Stack) 자료 구조
글. 오상문 (sualchi@data.net)
그림으로 설명하자면, 스택은 입구와 출구가 같고 입출구 반대쪽은 막힌 형태이다.
그래서 먼저 들어간 것이 가장 나중에 나온다. (선입후출)
그림에 볼 수 있듯이 데이터 '1'이 가장 먼저 들어갔지만, 꺼낼 때는 가장 늦게 나온다.
입출구
/
| |
| 5 |
| 4 |
| 3 |
| 2 |
| 1 |
====== <-- 입출구 반대쪽은 막힘
/* STACK(스택) 자료구조 C 예제
작성. 오상문 sualchi@daum.net */
#include <stdio.h>
/* 스택 구조 (5개 정수 데이터를 처리하는 스택) */
#define MAX 5
int a[MAX], top = -1;
int stack_err = 0; /* 스택 push/pop 결과: 0 = 정상, 1 = 에러 */
/* 스택에 데이터를 넣는 함수 */
/* 입력값 : 정수 */
/* 반환값: 0 = 정상, 1 = 에러 */
int push(int x)
{
if (top >= MAX - 1)
return (stack_err = 1); /* 스택 다 찼음 */
stack_err = 0;
a[++top] = x;
return 0;
}
/* 스택에서 데이터를 빼는 함수 */
/* 반환값: check_stack_error() 호출 결과가 0일 때, 스택 데이터 */
int pop( )
{
if (top < 0)
return (stack_err = 1); /* 스택 데이터 없음 */
stack_err = 0;
return a[top--];
}
/* 스택 입출력 작업에서 에러 발생했는지 검사 */
/* 반환값: 0 = 정상, 1 = 에러 */
int check_stack_error()
{
int err = stack_err;
stack_err = 0;
return err;
}
/* 스택 자료구조 테스트 예제 */
int main()
{
int i, data;
for (i = 1; i <= MAX+2; i++) { /* 7개 데이터 PUSH 처리 */
if (push(i * 100))
printf("스택 PUSH 에러!\n");
else
printf("PUSH: %i\n", i * 100);
}
for (i = 1; i <= MAX+2; i++) { /* 7개 데이터 POP 처리 */
data = pop();
if (check_stack_error())
printf("스택 POP 에러!\n");
else
printf("POP: %i\n", data);
}
return 0;
}
/* 끝 */
'C' 카테고리의 다른 글
짝수 홀수 구분하는 다양한 방법 (C / C++) (0) | 2016.12.16 |
---|---|
비주얼 C/C++ API 프로그래밍: 싸인 곡선 출력 예제 (0) | 2016.12.14 |
C 언어 버블 소트 (거품 정렬) 소스 (0) | 2016.08.11 |
C, 이진트리 구현 소스 (0) | 2016.08.11 |
C, 스택 큐 구현 소스 (0) | 2016.08.11 |