본문 바로가기
자료구조

스택(Stack) 자료구조란? (C언어, Java, Python 예시코드 포함)

by Best Coding 2024. 12. 18.
반응형

스택(stack)

 

(1) 스택(Stack) 자료구조란?

스택(Stack)은 데이터를 후입선출(LIFO, Last In First Out) 방식으로 처리하는 선형 자료구조입니다. 즉, 가장 나중에 삽입된 데이터가 가장 먼저 제거됩니다. 이 특성 덕분에 함수 호출 관리, 계산기 구현, 문자열 역순 처리 등 다양한 프로그래밍 문제에서 활용됩니다.

 

(2) 스택의 기본 동작

  1. 삽입(Push): 스택의 맨 위에 데이터를 추가.
  2. 삭제(Pop): 스택의 맨 위 데이터를 제거.
  3. 확인(Peek 또는 Top): 스택의 맨 위 데이터를 제거하지 않고 확인.

 

(3) 스택의 주요 특징

  • 후입선출(LIFO): 나중에 삽입된 데이터가 먼저 제거됨.
  • 제한된 접근: 데이터는 스택의 맨 위에서만 삽입 및 제거 가능.
  • 구현 방식: 배열 또는 연결 리스트를 사용.
반응형

 

(4) 스택 구현 예시

C언어로 구현한 스택

#include <stdio.h>
#define SIZE 5

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

void push(int data) {
    if (top == SIZE - 1) {
        printf("Stack is full!\n");
        return;
    }
    stack[++top] = data;
}

int pop() {
    if (top == -1) {
        printf("Stack is empty!\n");
        return -1;
    }
    return stack[top--];
}

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

void display() {
    if (top == -1) {
        printf("Stack is empty!\n");
        return;
    }
    for (int i = 0; i <= top; i++) {
        printf("%d ", stack[i]);
    }
    printf("\n");
}

int main() {
    push(10);
    push(20);
    push(30);
    display();
    printf("Popped: %d\n", pop());
    display();
    printf("Top element: %d\n", peek());
    return 0;
}

 

Java로 구현한 스택

import java.util.Stack;

public class StackExample {
    public static void main(String[] args) {
        Stack<Integer> stack = new Stack<>();

        // Push
        stack.push(10);
        stack.push(20);
        stack.push(30);
        System.out.println("Stack: " + stack);

        // Pop
        int removed = stack.pop();
        System.out.println("Popped: " + removed);
        System.out.println("Stack after pop: " + stack);

        // Peek
        int top = stack.peek();
        System.out.println("Top element: " + top);
    }
}

 

Python으로 구현한 스택

stack = []

# Push
stack.append(10)
stack.append(20)
stack.append(30)
print("Stack:", stack)

# Pop
removed = stack.pop()
print("Popped:", removed)
print("Stack after pop:", stack)

# Peek
top = stack[-1] if stack else None
print("Top element:", top)

스택의 활용 사례

  1. 함수 호출 관리: 함수의 호출과 복귀 순서를 저장.
  2. 문자열 뒤집기: 문자열을 역순으로 출력.
  3. 수식 평가 및 변환: 중위 표기법을 후위 표기법으로 변환.
  4. 그래프 탐색: DFS(깊이 우선 탐색)에서 사용.

스택은 단순하면서도 효율적인 자료구조로, 프로그래밍 문제를 해결하는 데 중요한 역할을 합니다.

반응형

댓글