Backend/C

컴퓨터의 기본, Stack

petitCoding 2012. 4. 12. 10:38

 
 
흠..  정말 기본적이지만 중요한 개념..스택에 대해서 정리를 해보았다.
스택은 데이터를 아래서부터 차곡차곡 쌓고, 꺼낼 떄는 위에서 부터 꺼내는 Last In First Out 형식의 데이터 구조이다.
자료를 넣는 것을 PUSH,꺼내는 것을 POP이라고 하며, PUSH 및 POP을 할때 마다 스택 포인터의 값이 변한다.
 
<Program Source>
 
#include <stdio.h>
#define MAX 100
 
int stack[MAX];          //스택
int stack_pointer = 0;  //스텍 포인터         
int push(int);
int pop(int*);
 
int main(void){
      int c, n, num=0;
      while(num != 3){
           printf("1.Input 2.Output 3.Exit : ");
           scanf("%d", &num);
           switch(num){
                 case 1:
                       printf("Data : ");
                       scanf("%d", &n);
                       if(push(n) == -1){          //스택이 꽉 찬 경우
                             printf("Stack is full!\n");
                       }
                       break;
                 case 2:
                       if(pop(&n) == -1){          //스택이 빈 경우
                             printf("Stack is empty\n");
                       }
                       else printf("stack data --> %d\n", n);
                       break;
                 default:
                       break;
           }
      }
      return 0;
}
 
int push(int n){
      if(stack_pointer < MAX){          //스택이 꽉 찼는지 검사
            stack[stack_pointer] = n;   //PUSH
            stack_pointer++;              //스택 포인터 증가
            return 0;
      }
      else
            return -1;
}
 
int pop(int *n){
      if(stack_pointer >0){                    //스택에 자료가 있는지 검사
            stack_pointer--;                    //스택 포인터 감소
            *n = stack[stack_pointer];      //POP
            return 0;
      }
      else
            return -1;
}
 
<Result>
 


 

반응형

'Backend > C' 카테고리의 다른 글

몇 가지 간단한 math 함수 사용하기  (0) 2012.04.12
Dynamic Programming  (0) 2012.04.12
Makefile 만들기  (0) 2012.04.12
최대 공약수 구하기  (0) 2012.04.12
파스칼의 삼각형  (0) 2012.04.12