C & Docker & LINUX

C언어 - 스택(stack) push, pop

로픽 2016. 5. 23. 06:36
300x250

C언어 - 스택(stack) push, pop

** C언어 스택에 대한 예제입니다.

- push와 pop에 대해서 별도로 함수를 구현하여 만들었습니다.

#include<stdio.h>
#define MAX_STACK_SIZE 10

typedef struct {        //스택의 값을 저장할 구조체 선언
   int key;
   char grade;
}element;

int top = -1;        //전역변수
element stack[MAX_STACK_SIZE];        //전역변수 - 값을 저장할 배열
void push(element data);
element pop();

main()
{
   element data;
   int i, n, cond = 1;
   i = 0;

   while (cond) {
     printf("데이터 입력: ");
     scanf("%d %c", &data.key, &data.grade);
     
     if (data.key != 0)
     {
       push(data);        //함수호출하여 입력한 값을 저장한다
       i++;
     }

     printf("스택에 데이터를 계속 입력하실래요?(1/0)");
     scanf("%d", &cond);
   }

   printf("스택에서 몇개의 데이터가 필요하세요 ? ");
   scanf("%d", &n);

   for (i = 0; i < n; i++) {
     data = pop();        //함수호출하여 입력한 값을 출력
     printf("%d\t%c\n", data.key, data.grade);
   }
}

void push(element item)
{

   if (top >= MAX_STACK_SIZE - 1)
     printf("Stack is overflow!!!\n");

   else {
     top++;
     stack[top] = item;
   }
}



element pop()
{
   if (top == -1)
   	printf("Stack is empty!!!\n");
   else
   	return stack[top--]; //값을 리턴한 이후에 top의 값이 1 줄어든다
}
 

** C언어 스택 출력 결과

c

 

** LIFO (Last-In Fisrt Out) - 후입선출 구조의 스택은 입력할 때는 차곡 차곡 쌓이지만 출력할 때는 가장 상단(top)에 있는 값이 출력되어 나온다

 

그래서 1 2 3 4 5 순으로 입력했을 때 5 4 3 2 순으로 출력되어 나온 이유이다

반응형