스택 (Stack)

2024. 6. 24. 23:05·CS/Data Structure

스택 알고리즘의 기본 개념

  1. 스택의 정의:
    • 후입선출(LIFO) 방식으로 동작하는 자료 구조.
    • 가장 나중에 삽입된 데이터가 가장 먼저 제거됨.
  2. 기본 연산:
    • Push: 스택의 맨 위에 데이터를 추가합니다.
    • Pop: 스택의 맨 위 데이터를 제거하고 반환합니다.
    • Peek/Top: 스택의 맨 위 데이터를 제거하지 않고 반환합니다.
    • isEmpty: 스택이 비어 있는지 확인합니다.

스택의 활용 사례

프론트엔드 개발에서 스택을 활용하는 몇 가지 대표적인 사례를 살펴보겠습니다.

  1. 브라우저의 뒤로 가기/앞으로 가기 기능:
    • 방문한 페이지의 URL을 스택에 저장하고, "뒤로 가기"를 누르면 Pop 연산을 사용하여 이전 페이지로 이동합니다.
  2. 괄호의 유효성 검사:
    • 코드 에디터나 웹 폼에서 괄호의 짝을 맞추기 위해 스택을 사용합니다.
  3. 문자열 역순 변환:
      • 문자열을 뒤집기 위해 스택을 사용할 수 있습니다.
function reverseString(str) {
  const stack = [];
  for (let i = 0; i < str.length; i++) {
    stack.push(str[i]);
  }
  let reversed = '';
  while (stack.length > 0) {
    reversed += stack.pop();
  }
  return reversed;
}

 

자바스크립트 예시

class Stack {
    constructor() {
        this.items = [];
    }

    // 스택에 원소를 추가합니다.
    push(element) {
        this.items.push(element);
    }

    // 스택에서 원소를 제거하고 반환합니다.
    pop() {
        if (this.isEmpty()) {
            return "Stack is empty";
        }
        return this.items.pop();
    }

    // 스택의 맨 위에 있는 원소를 반환합니다.
    peek() {
        if (this.isEmpty()) {
            return "Stack is empty";
        }
        return this.items[this.items.length - 1];
    }

    // 스택이 비어있는지 확인합니다.
    isEmpty() {
        return this.items.length === 0;
    }

    // 스택의 원소 수를 반환합니다.
    size() {
        return this.items.length;
    }

    // 스택을 비웁니다.
    clear() {
        this.items = [];
    }

    // 스택의 모든 원소를 문자열로 변환합니다.
    print() {
        return this.items.toString();
    }
}

// 스택 사용 예시
const stack = new Stack();

 

'CS > Data Structure' 카테고리의 다른 글

해시테이블 (Hash Table)  (0) 2024.07.01
덱 (Deque)  (0) 2024.06.30
큐 (Queue)  (0) 2024.06.25
연결 리스트 (Linked List)  (0) 2024.06.23
배열 (Array)  (0) 2024.06.23
'CS/Data Structure' 카테고리의 다른 글
  • 덱 (Deque)
  • 큐 (Queue)
  • 연결 리스트 (Linked List)
  • 배열 (Array)
예슬e
예슬e
예슬e
예슬e개발로그
예슬e
전체
오늘
어제
  • 분류 전체보기 (27)
    • 💙 At work in 2024 (0)
    • FrontEnd (7)
      • React (7)
      • Package Manager (0)
      • Build System (0)
      • Transpiler & Bundler (0)
      • Architecture (0)
      • Test (0)
    • BackEnd (2)
    • CS (8)
      • Data Structure (7)
      • Network (1)
    • Algorithm (10)
    • Project (0)
    • Blog (0)

블로그 메뉴

  • 홈
  • 태그
  • 방명록

공지사항

인기 글

태그

useCallback
useState
useEffect
메모이제이션
프론트엔드
자바스크립트
리액트파이버
jsx
재귀
리렌더링
api만들기
백엔드
타뷸레이션
리액트 파이버
하노이의탑
리액트딥다이브
자료구조
알고리즘
자바스크립트배열
리액트

최근 댓글

최근 글

hELLO· Designed By정상우.v4.5.3
예슬e
스택 (Stack)
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.