일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- Map.of()
- 3주차 회고
- 2023
- Paths.get()
- Python
- requested
- 실패했지만성공했다
- 채팅목록조회
- 자유 프로젝트
- new File().toPath()
- Spring
- 누구나 자료구조와 알고리즘
- 코드스쿼드
- 재즈밋
- 파이썬
- 231103
- MapSqlParameterSource
- 오류
- MAX
- 22년도
- 백준
- BOJ
- 테이크스트라
- JazzMeet
- baeldung
- Til
- 코드스쿼드max
- 회고
- rotuter
- NamedParameterJdbcTemplate
- Today
- Total
어제보다 한걸음 더
[책] 누구나 자료구조와 알고리즘 - 9장 스택과 큐로 간결한 코드 생성 본문
누구나 자료 구조와 알고리즘 | 제이 웬그로우 - 교보문고
누구나 자료 구조와 알고리즘 | 사칙 연산으로 복잡한 알고리즘을 쉽게 이해해보자 수학 용어와 전문 용어가 아니어도 이해한다 이 분야의 책은 대부분 컴퓨터 공학 전공자를 대상으로 쓰였거
product.kyobobook.co.kr
스택과 큐는 제약을 갖는 배열이다.
운영체제 아키텍처, 출력 잡, 데이터 순회 등 임시 컨테이너로 사용해 뛰어난 알고리즘을 만들 수 있다.
이러한 스택과 큐는 임시 데이터를 처리하되 데이터를 처리하는 순서에 특히 중점을 둔다.
스택 Stack
스택에는 다음과 같은 세가지 제약이 있다.
- 데이터는 스택의 끝에만 삽입할 수 있다.
- 데이터는 스택의 끝에서만 삽입할 수 있다.
- 스택의 마지막 원소만 읽을 수 있다.
이미지 출처: https://www.programiz.com/dsa/stack
스택의 끝을 위(top)이라고 하고, 스택의 시작을 밑(bottom)이라고 부른다.
스택에 새 값을 삽입하는 것을 스택에 푸시(push)한다고 한다.
스택의 위에서 원소를 제거하는 것을 스택으로부터 팝(pop)한다고 한다.
스택 연산은 "Last In, First Out" 줄여서 LIFO 라고 한다. 스택에 푸시된 마지막 항목이 스택에서 팝될 첫 번째 항목이라는 의미다.
- 대부분의 프로그래밍 언어에서는 스택이 내장 데이터 타입이나 클래스로 딸려있지 않다. 구현은 사용자의 몫이다.
- 스택은 어떤 데이터 구조를 쓰든 개의치 않는다. LIFO 방식으로 동작하는 데이터 원소들의 리스트이면 된다.
- 그래서 스택은 추상 데이터 타입에 속한다. 스택은 다른 내장 데이터 구조를 사용하는 이론적 규칙 집합으로 이뤄진 데이터 구조다.
- 프로그래밍 언어 자체에서 Stack 클래스를 구현한다 해도 내부적으로 다양한 데이터 구조를 쓸 수 있다는 개념은 변하지 않는다.
추상자료형이란 자료형의 연산을 정의한 것으로 실제 구현 방법은 명시하지 않음
예제
린터 (linter) 자바스크립트 문법 검사기에서 스택을 사용할 수 있다. (ex. 소괄호, 중괄호, 대괄호...)
- 여는 괄호면 스택에 푸시한다. (끝지점까지 돌았는데도 스택에 남아있으면 오류 출력)
- 닫는 괄호면 스택에서 팝한다. (스택이 비어있으면 팝할 수 없다. 종류가 같은 괄호여야 한다.)
제약을 갖는 데이터 구조의 중요성
스택이 배열로 구현할 수 있다면, 그냥 배열로 사용하면 안될까?
제약을 갖는 데이터 구조(스택, 큐 ...)의 중요성
- 잠재적 버그를 막을 수 있다. (배열 중간에 실수로라도 삽입 삭제 불가능)
- 문제를 해결하는 새로운 사고 모델(mental model)을 제공한다. (문제를 해결할 수 있는 아이디어 제공)
큐 Queue
큐도 스택처럼 임시 데이터를 처리하기 위해 디자인 된 데이터 구조이며, 추상 데이터 타입이다.
큐는 다음과 같은 세가지 제약이 있다.
- 데이터는 큐의 끝에만 삽입할 수 있다.
- 데이터는 큐의 앞에서만 삭제할 수 있다.
- 큐의 앞에 있는 원소만 읽을 수 있다.
이미지 출처: https://thebook.io/080200/0077/
큐의 시작을 앞(Front), 큐의 끝을 뒤(Back)라고 부른다.
삽입은 인큐(enqueue), 삭제는 디큐(dequeue)라고 부른다.
큐 연산은 "First In, First Out" 줄여서 FIFO 이라고 한다.
큐는 출력 잡(job), 웹 애플리케이션의 백그라운드 워커에 이르기까지 많은 애플리케이션에서 흔하게 큐를 사용한다.
큐는 이러한 시스템 개발에 토대가 된다.
또헌 큐는 요청받은 순서대로 요청을 처리하므로 비동기식 요청을 처리하는 완벽한 도구이기도 하다.
이 외에 이륙을 기다리는 비행기나 의사를 기다리는 환자처럼 정해진 순서대로 이벤트가 발생해야 하는 실세계 시나리오를 모델링하는 데 흔하게 쓰인다.
마무리
스택과 큐를 이해했으니 다음 장에서는 스택에 기반한 재귀를 배울 예정이다.
재귀 역시 효율적인 많은 알고리즘의 토대다.
'Computer Science > Algorithm' 카테고리의 다른 글
[책] 누구나 자료구조와 알고리즘 - 11장 재귀적으로 작성하는 법 (0) | 2023.12.12 |
---|---|
[책] 누구나 자료구조와 알고리즘 - 10장 재귀를 사용한 재귀적 반복 (0) | 2023.12.04 |
[책] 누구나 자료구조와 알고리즘 - 8장 해시 테이블로 매우 빠른 룩업 (2) | 2023.11.27 |
[책] 누구나 자료구조와 알고리즘 - 12장 동적 프로그래밍 (1) | 2023.11.11 |
[책] 누구나 자료구조와 알고리즘 - 7장 일상적인 코드 속 빅 오 (3) | 2023.10.28 |