자료구조 4장 - 스택

2025. 9. 3. 21:54·자료구조

스택(Stack) 개요

스택(Stack)은 가장 단순하지만 강력한 자료구조 중 하나입니다.
자료를 한쪽 방향(Top)에서만 넣고 빼는 구조로, LIFO (Last In, First Out) 원칙을 따릅니다.

쉽게 말하면, 컵 쌓기와 같습니다. 맨 위에 컵을 쌓고, 맨 위의 컵만 꺼낼 수 있는 구조예요.


1️⃣ 스택의 구조

  • Top(탑) : 삽입과 삭제가 일어나는 위치
  • Push : 스택에 데이터를 넣는 연산
  • Pop : 스택에서 데이터를 꺼내는 연산
  • Peek/Top : 현재 스택의 가장 위에 있는 데이터를 확인하는 연산

2️⃣ 스택의 장점과 단점

✅ 장점

  • 구현이 간단하다.
  • 함수 호출(재귀), 수식 계산, 브라우저 뒤로가기 등 실제 응용이 많음.

❌ 단점

  • 중간 데이터에 접근할 수 없다. (Top에서만 접근 가능)
  • 크기가 제한된 경우(배열 기반) 오버플로우/언더플로우 발생 가능

3️⃣ 스택의 주요 연산

Push (삽입)

데이터를 스택의 Top에 추가합니다.

void push(int stack[], int& top, int size, int x) {
    if (top >= size - 1) {
        cout << "Stack Overflow\n";
        return;
    }
    stack[++top] = x;
}

Pop (삭제)

스택의 Top 데이터를 꺼내고 제거합니다.

int pop(int stack[], int& top) {
    if (top < 0) {
        cout << "Stack Underflow\n";
        return -1;
    }
    return stack[top--];
}

Peek (탑 원소 확인)

int peek(int stack[], int top) {
    if (top < 0) {
        cout << "Stack is Empty\n";
        return -1;
    }
    return stack[top];
}

4️⃣ 스택의 성능 분석

연산 시간 복잡도 설명

Push O(1) Top에 원소 추가
Pop O(1) Top 원소 제거
Peek O(1) Top 원소 확인

스택은 삽입, 삭제, 조회가 모두 O(1) 로 매우 효율적입니다.


5️⃣ 스택의 활용 예시

  • 함수 호출 관리 (Call Stack)
    → 재귀 호출에서 함수가 순차적으로 쌓였다가 반환될 때 하나씩 Pop 됨
  • 문자열 역순 출력
    → 문자를 차례대로 Push 후, Pop 하면서 꺼내면 문자열이 뒤집힘
  • 수식 계산
    → 후위 표기법(Postfix) 계산에 활용
  • 브라우저 뒤로가기 / 실행 취소 (Undo 기능)
    → 최근 작업을 순서대로 되돌릴 수 있음

결론

스택은 단순한 구조이지만, 실제 프로그램 내부에서 광범위하게 사용되는 핵심 자료구조입니다.
특히, 재귀와 수식 계산, 프로그램 실행 흐름 제어 같은 곳에서 없어서는 안 될 도구죠.

'자료구조' 카테고리의 다른 글

유저 ID 타입 선택 가이드: long vs string vs UUID  (0) 2025.10.12
자료구조 3장 - 배열  (0) 2024.08.14
자료구조 2장  (0) 2024.08.13
자료구조 1장  (0) 2024.08.12
'자료구조' 카테고리의 다른 글
  • 유저 ID 타입 선택 가이드: long vs string vs UUID
  • 자료구조 3장 - 배열
  • 자료구조 2장
  • 자료구조 1장
통촏하여주시옵소서
통촏하여주시옵소서
솔방울님의 블로그 입니다.
  • 전체
    오늘
    어제
  • 통촏하여주시옵소서
    솔방울의 IT
    GuestBook Guest
    GitHub GitHub
    Notion Notion
    글쓰기 관리
    • 분류 전체보기 (126)
      • C++ (2)
      • Java (15)
      • Spring (13)
      • 알고리즘 (0)
      • 자료구조 (5)
      • 보안 (7)
        • 네트워크보안 (3)
        • 백신 프로그램 (4)
      • 네트워크 (10)
        • 네트워크 관련지식 (7)
        • TCP IP (3)
      • 임베디드 (0)
        • 회로이론 (0)
      • Windows (9)
      • TIL (55)
        • TIL(Today I Learned) (19)
        • 코딩테스트 연습문제 (29)
        • 내일배움캠프 숙제 (6)
        • 스파르타 단기심화_Java과정 (1)
      • 프로젝트 (4)
        • 백신데스크톱 (1)
        • 스파르타코딩 (3)
      • 자격증 (4)
        • 사무자동화산업기사 (1)
        • 정보처리산업기사 (3)
      • 사업관리 (2)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 06-13 18:54
  • 공지사항

    • 방명록을 적어주시면
  • 태그

    MySelectShop
    스파르타코딩
    개발자전형
    spring
    springboot
    epp
    스파르타코딩클럽
    개발자성장기
    헌법기관
    JPA
    백엔드개발자
    비밀집단
    커리어전환
    정보보안
    IT
    백신프로그램
    검은조직
    기술지원
  • 인기 글

  • whlsls3377.dev@gmail.com
통촏하여주시옵소서
자료구조 4장 - 스택
상단으로

티스토리툴바