반응형

스택(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;
}


/* 끝 */


반응형

+ Recent posts