스택이란..? 상자를 쌓는 것과 같다.
가장 먼저 쌓은 상자는 가장 늦게 뺄 수 있다.
결국 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);
'자료구조' 카테고리의 다른 글
[자료구조] 배열로 된 큐 (0) | 2019.12.12 |
---|---|
[자료구조] 리스트로 된 스택 (0) | 2019.12.12 |
[자료구조] 링크드 리스트의 이해 (0) | 2019.12.12 |
[자료구조] 배열로 된 연결 리스트 (0) | 2019.12.12 |
[자료구조] 선택정렬 (0) | 2019.12.07 |