Data Structure

배열로 구현한 스택

ppwag 2020. 6. 16. 15:44

C

객체 개념이 없는 c 언어에서는 구조체를 사용하면 문제를 우아하게 처리할 수 있다.

소스코드

#include <stdio.h>
#define ARRSIZE 5 

typedef int element;

typedef struct {
    element arr[ARRSIZE];
    int top;
}stack;

void init(stack *s) {
    s->top = -1; /* 아무것도 없는 상태를 -1 */
}

int is_empty(stack *s) {
    return (s->top == -1);
}

int is_full(stack *s) {
    return (s->top == ARRSIZE - 1);
}

void push(stack *s, element e) {
    if (is_full(s)) {
        printf("스택 포화 에러\n");
    }
    else {
        s->arr[++s->top] = e;
    }
}

element pop(stack *s) {
    if (is_empty(s)) {
        printf("스택 공백 에러\n");
        return -1;
    }
    else {
        /*
        배열은 top 값으로 참조되기 때문에
        pop 한 값을 NULL 로 바꾸어주지 않아도 괜찮다.
        */
        return s->arr[s->top--];
    }
}

element peek(stack *s) {
    if (is_empty(s)) {
        printf("스택 공백 에러\n");
        return -1;
    }
    else {
        return s->arr[s->top];
    }
}

int main() {
    stack s; /* 구조체 변수 선언 시 배열 create */

    init(&s);

    push(&s, 1);
    push(&s, 2);
    push(&s, 3);
    push(&s, 4);
    push(&s, 5);
    push(&s, 6);

    printf("%d\n", pop(&s));

    printf("%d\n", peek(&s));

    return 0;
}

출력

스택 포화 에러
5
4

'Data Structure' 카테고리의 다른 글

스택 미로 탐색 문제  (0) 2020.07.12
스택 수식의 계산  (0) 2020.07.05
스택 괄호 검사  (0) 2020.06.21
연결 리스트로 구현한 스택  (0) 2020.06.16
스택  (0) 2020.06.10

댓글