스택이란..? 상자를 쌓는 것과 같다.

가장 먼저 쌓은 상자는 가장 늦게 뺄 수 있다.

결국 1 2 3 4 5를 입력하면 5 4 3 2 1이 나와야한다.



main문


#include <stdio.h>

#include "array.h"


int main(){


struct data stack;


init(&stack);   // 초기화



// 순차적으로 1 2 3 4 를 입력받는다.


push(&stack, 1);

push(&stack, 2);

push(&stack, 3);

push(&stack, 4);


// 스택이 비어있지 않다면 4 3 2 1 을 출력한다.


while (!empty(&stack)){

printf("%d ", pop(&stack));

}

return 0;

}



array.c (정의문)


#include <stdio.h>

#include <stdlib.h>

#include "array.h"


void init(struct data *a){


a->top = -1;  // top은 초기화시 배열의 아무것도 가리키고 있지않다.

}



int empty(struct data *a){


if (a->top == -1){   // 인덱스가 -1이라면 1을 반환하고 !과 만나게 되어 while문을 나감

return 1;

}

else{

return 0;

}

}



void push(struct data *a, int num){


a->top += 1;  // 인덱스를 1 증가한다.  0 1 2 3..

a->arr[a->top] = num;  // 입력한 값을 배열에 넣는다.


}


int pop(struct data *a){

int i;


i = a->top;  // i에 현재 인덱스를 저장한다.

a->top -= 1;  // 인덱스를 하나 뺀다.


return a->arr[i];  // 현재 인덱스에 담긴 값을 출력한다.

}


int peek(struct data *a){

return a->arr[a->top];  // 출력

}





array.h (선언문)


struct data{

int top;  // top은 배열을 접근하는 인덱스

int arr[100];  

};


void init(struct data *a);

void push(struct data *a, int num);


int empty(struct data *a);

int pop(struct data *a);

int peek(struct data *a);

 

블로그 이미지

ryancha9

https://blog.naver.com/7246lsy

,