/************************************************************************/
/* Stack.cpp : 배열을 사용한 스택                                       */
/* 푸시와 팝을 이용한 LIFO( Last In First Out ) 구조     */
/************************************************************************/

#include <STDIO.H>

#define MAX  10

int stack[MAX];
int top;

/************************************************************************/
/* 함수명 : init_stack                                                  */
/* 스택 초기화 top = -1 이다.           */
/************************************************************************/
void init_stack( void )
{
 top = -1;
}

/************************************************************************/
/* 함수명 : push                                                        */
/* t 를 스택에 넣는다.             */
/************************************************************************/
int push(int t)
{
 if(top >= MAX - 1)
 {
  printf("\n Stack overflow.");
  return -1;
 }
 stack[++top] = t;
 return t;
}


/************************************************************************/
/* 함수명 : pop                                                         */
/* 가장 위에 있는 데이터를 리턴한다.         */
/************************************************************************/
int pop( void )
{
 if(top < 0)
 {
  printf("\n Stack underflow.");
  return -1;
 }
 return stack[top--];
}

/************************************************************************/
/* 함수명 : print_stack                                                 */
/* 스택의 내용을 모두 출력한다.           */
/************************************************************************/
void print_stack( void )
{
 int i;
 printf("\n  Stack Contents : Top ----> Bottom\n");
 for(i = top ; i >= 0 ; i--)
  printf("%-6d", stack[i]);
}

/************************************************************************/
/* 함수명 : main                                                        */
/* main function              */
/************************************************************************/
void main( void )
{
 int i;
 init_stack();

 printf("\nPush 5, 4, 7, 8, 2, 1");
 push(5);
 push(4);
 push(7);
 push(8);
 push(2);
 push(1);
 print_stack();

 printf("\nPop");
 i = pop();
 print_stack();
 printf("\n popping value is %d", i);

 printf("\nPush 3, 2, 5, 7, 2");
 push(3);
 push(2);
 push(5);
 push(7);
 push(2);
 print_stack();

 printf("\nNow stack is full, push 3");
 push(3); // 오버플로 에러남
 print_stack();

 printf("\nInitialize stack");
 init_stack();
 print_stack();

 printf("\nNow stack is empty, pop");
 i = pop(); // 언더플로 에러
 print_stack();
 printf("\n popping value is %d", i);
}


 

Posted by 행복한 프로그래머 궁금쟁이박

댓글을 달아 주세요