쌓아올리며 후입선출하는 자료 구조 어셈블러에서부터 고급 언어까지 꼭 필요한 녀석

원리

구현

배열

#include <stdio.h>

const int MAX_ITEM = 100;
const int INIT_TOP = -1;

typedef struct {
    int top;
    char *str[MAX_ITEM];
} Stack;

void init(Stack *s) {
    s->top = INIT_TOP;
}

int isEmpty(Stack *s) {
    return s->top <= INIT_TOP;
}

int isFull(Stack *s) {
    return s->top >= MAX_ITEM;
}

void push(Stack *s, char *str) {
    if (isFull(s)) {
        printf("Stack is full!\\n");
        return;
    }
    
    s->top++;
    s->str[s->top] = str;
}

char *pop(Stack *s) {
    if (isEmpty(s)) {
        return NULL;
    }
    char *result = s->str[s->top];
    s->top--;
    return result; 
}

int main(void) {
    // insert code here...
    Stack s;
    init(&s);
    
    push(&s, "Foo");
    push(&s, "bar");
    printf("%d\\n", s.top);
    puts(pop(&s));
    puts(pop(&s));
    
    return 0;
}