CS/자료구조

[C언어] stack 자료 구조 구현

하루설렘 2021. 12. 4. 22:02

C를 활용한 stack 자료 구조 구현

전체 구조
#include <stdio.h>
#include <stdlib.h>
#define SIZE 100

// stack struct 구성
typedef struct stack {
    // arr[SIZE], top
    int arr[SIZE];
    int top; 
} stack;


// init 함수
void init(stack *s)
{
    s -> top = -1; // stack에 초기상태 -1, Push해서 data 들어오면 0부터 index시작
}


// is_empty 함수 구성
int is_empty(stack *s)
{
    if (s->top == -1)
        return 1;
    return 0;
}

// is_full 함수 구성
int is_full(stack *s){
    if (s->top == SIZE - 1)
        return 1;
    return 0;
}

// push 기능 구현
int push(stack *s, int value) //*s 포인터 변수와 값을 입력
{
    if (is_full(s))
    {
        printf("stack is full");
        exit(1);
    }
    s->arr[++(s->top)] = value; //다음 인덱스에 value 대입
    printf("pushed : %d\n", value);
}

// pop 기능 구현
int pop(stack *s) //*s 포인터 변수을 입력
{
    if (is_empty(s))
    {
        printf("stack is empty");
        exit(1);
    }
    return s->arr[(s->top)--]; //(s->top)값으로 참조 후, s->top값 -= 1
}
// peek 기능함수 구현
int peek(stack *s)
{
    if (is_empty(s) == 1)
    {
        printf("stack is empty");
        exit(1);
    }
    return s->arr[s->top];
}
// main 함수 구현
int main(void)
{
    stack s;
    init(&s); 

    push(&s, 10);
    push(&s, 20);
    push(&s, 30);

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

    return 0;
}