스택(Stack)

ORCASUIT·2023년 10월 23일

스택(Stack)

스택은 컴퓨터 과학에서의 중요한 자료 구조로, 후입선출(LIFO: Last-In-First-Out) 원칙을 따릅니다.

Keywords: #스택 #자료구조 #후입선출 #LIFO


스택의 정의

  • 푸시(push): 스택에 데이터를 추가하는 작업
  • 팝(pop): 스택에서 데이터를 제거하는 작업
  • 피크/탑(Peek/Top): 스택의 상단 데이터를 확인하지만 제거하지 않는 작업

스택의 특징

  1. 후입선출 (LIFO)
  2. Push: 데이터 추가
  3. Pop: 데이터 제거 및 반환
  4. Peek/Top: 상단 데이터 확인 (제거 X)

스택의 사용 사례

  • 역순: 데이터 정렬 및 검색
  • 호출 스택: 함수나 메서드 호출 추적
  • 괄호 일치: 올바른 괄호 닫기 확인
  • 후위 표기법: 수학 표현식 계산
  • 깊이 우선 탐색(DFS): 그래프 탐색

스택의 구현

스택은 배열이나 연결 리스트로 구현될 수 있습니다.

  • 배열: 고정 크기 스택
  • 연결 리스트: 동적 크기 스택

스택 초기화

파이썬:

stack = []

C:

#include <stdio.h>
#define MAX_SIZE 100

int stack[MAX_SIZE];
int top = -1;

Push 연산

파이썬:

def push(item):
    stack.append(item)

C:

void push(int item) {
    if (top >= MAX_SIZE - 1) {
        printf("Stack overflow!\n");
        return;
    }
    stack[++top] = item;
}

Pop 연산

파이썬:

def pop():
    if len(stack) == 0:
        print("Stack underflow!")
        return None
    return stack.pop()

C:

int pop() {
    if (top == -1) {
        printf("Stack underflow!\n");
        return -1;  // Assuming -1 indicates error
    }
    return stack[top--];
}

Peek 연산

파이썬:

def peek():
    if len(stack) == 0:
        print("Stack is empty!")
        return None
    return stack[-1]

C:

int peek() {
    if (top == -1) {
        printf("Stack is empty!\n");
        return -1;  // Assuming -1 indicates error
    }
    return stack[top];
}

스택의 구현에 있어 파이썬은 간편하게 내장 리스트를 사용하지만, C에서는 스택의 크기와 상단 위치 등을 직접 관리해야 합니다.


0개의 댓글