Computer Science

[자료구조] 스택 구현 : 배열 이용 방법

imsunbow 2024. 2. 3. 19:54

스택을 구현하기 위해 배열을 사용할 경우, 일차원 배열 stack[MAX_STACK_SIZE] 를 사용한다. 스택의 변수 top은 가장 최근에 삽입된 요소를 가리키는 변수로, 초기값을 -1로 세팅한다(공백 스택을 의미)

 

스택에서 가장 먼저 삽입된 요소는 stack[0]에, 가장 최근에 삽입된 요소는 stack[top]에 저장된다 (스택의 개념)

 

[c코드로 스택 구현] 

 

#include <stdio.h>

#define MAX_STACK_SIZE 100

typedef struct {
    int stack[MAX_STACK_SIZE];
    int top;
} Stack;

// 스택 초기화
void initializeStack(Stack *s) {
    s->top = -1;  // 초기값으로 -1을 설정하여 공백 스택을 나타냄
}

// 스택이 비어 있는지 확인
int isEmpty(Stack *s) {
    return s->top == -1;
}

// 스택이 가득 차 있는지 확인
int isFull(Stack *s) {
    return s->top == MAX_STACK_SIZE - 1;
}

// 스택에 요소 추가 (push)
void push(Stack *s, int data) {
    if (isFull(s)) {
        printf("스택이 가득 찼습니다. 더 이상 요소를 추가할 수 없습니다.\n");
        return;
    }

    s->top++;
    s->stack[s->top] = data;
}

// 스택에서 요소 제거 (pop)
int pop(Stack *s) {
    int data;

    if (isEmpty(s)) {
        printf("스택이 비어 있습니다. 더 이상 요소를 제거할 수 없습니다.\n");
        return -1;  // 임의의 값 반환. 스택이 비어있으면 유효한 값이 없음
    }

    data = s->stack[s->top];
    s->top--;

    return data;
}

// 스택의 최상위 요소 확인 (peek)
int peek(Stack *s) {
    if (isEmpty(s)) {
        printf("스택이 비어 있습니다. 최상위 요소를 확인할 수 없습니다.\n");
        return -1;  // 임의의 값 반환. 스택이 비어있으면 유효한 값이 없음
    }

    return s->stack[s->top];
}

int main() {
    Stack myStack;
    initializeStack(&myStack);

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

    printf("Top element: %d\n", peek(&myStack));

    printf("Pop element: %d\n", pop(&myStack));
    printf("Pop element: %d\n", pop(&myStack));
    printf("Pop element: %d\n", pop(&myStack));

    printf("Is the stack empty? %s\n", isEmpty(&myStack) ? "Yes" : "No");

    return 0;
}

반응형