일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- reactjs
- JS console
- 개발콘텐츠
- 리액트
- 제네릭
- vue.js
- returnType
- typescript
- CSS
- 공통컴포넌트
- TSDoc
- Chart.js
- javascript
- 2022
- react
- 커스텀
- React Native
- 폰트적용하기
- click and drag
- 타입좁히기
- const 단언문
- React.js
- NonNullable
- 반복줄이기
- 성능최적화
- 레이아웃쪼개기
- 티스토리꾸미기
- utilty type
- 누구나 자료구조와 알고리즘
- 타입스크립트
- Today
- Total
몽땅뚝딱 개발자
누구나 자료구조와 알고리즘 - (8) 스택과 큐 본문
스택(stack)
1.1. 정의
스택이 데이터를 저장하는 방법은 배열과 같으며 단순히 원소들의 리스트이다.
스택 연산을 묘사하는 데 쓰이는 유용한 두문자어가 LIFO(Last In, First Out)이다.
스택은 다음과 같은 세 가지 제약이 있다.
- 데이터는 스택의 끝에만 삽입할 수 있다.
- 데이터는 스택의 끝에서만 삭제할 수 있다.
- 스택의 마지막 원소만 읽을 수 있다.
접시 더미나 수직으로 놓인 배열로 묘사하여 생각해보자.
1.2. 용어
- 푸시(push): 스택에 값을 추가하는 것
- 팝(pop): 스택의 위에서 원소를 제거하는 것
예를 들어, 대괄호와 중괄호가 잘 닫혔는지 확인하는 linter를 구현한다고 쳐보자.
"var a = { y: [1, 2, 3] }"라는 문장을 처리할 때 각 여는 괄호를 만날 때 마다 stack에 push하고 닫는 괄호를 만날 때 마다 stack을 pop하며 pop한 괄호의 종류가 일치하는지 확인하여 일치하지 않을 때 오류를 뱉어내면 된다.
큐(queue)
1.1. 정의
큐 또한 임시데이터를 처리하기 위해 디자인된 데이터 구조다.
큐 연산을 묘사하는 데 쓰이는 유용한 두문자어가 LIFO(First In, Last Out)이다.
큐는 다음과 같은 세 가지 제약이 있다.
- 데이터는 큐의 끝에만 삽입할 수 있다.
- 데이터는 큐의 앞에서만 삭제할 수 있다.
- 큐의 앞에 있는 원소만 읽을 수 있다.
1.2. 용어
- 인큐(enqueue): 큐에 값을 추가하는 것
- 디큐(dequeue): 큐에서 값을 삭제하는 것
제약을 갖는 데이터 구조의 중요성
스택과 큐는 실용적인 알고리즘을 간결하게 처리할 수 있는 프로그래머의 도구이다.
스택이 하는 일은 배열도 할 수 있으나 배열과 달리 제약을 갖는 데이터 구조가 주는 이점이 있다.
1. 제약을 갖는 데이터 구조를 사용하면 잠재적 버그를 막을 수 있다.
린팅 알고리즘은 스택의 위에서 항목을 제거하는 경우에만 동작한다. 스택 위 항목을 제외하고는 삭제할 수 없다.
2. 스택 같은 데이터 구조는 문제를 해결하는 새로운 사고 모델을 제공한다.
수택은 후입 선출 프로세스에 대한 전반적인 아이디어를 제공한다. LIFO 사고방식에 입각해 린터 같은 종류의 문제를 풀 수 있다.
출처
제이 웹그로우, 누구나 자료구조와 알고리즘 (길벗, 2021)
개인적으로 공부한 내용을 정리하는 블로그로
잘못된 개념을 게시하지않도록 주의하고 있으나 오류가 있을 수 있습니다.
'Development > 알고리즘' 카테고리의 다른 글
누구나 자료구조와 알고리즘 - (10) 퀵 정렬(Quicksort) (0) | 2023.09.29 |
---|---|
누구나 자료구조와 알고리즘 - (9) 재귀 (0) | 2023.09.28 |
누구나 자료구조와 알고리즘 - (7) 해시 테이블 (0) | 2023.09.28 |
누구나 자료구조와 알고리즘 - (6) 긍정적인 시나리오 최적화 (0) | 2023.09.24 |
누구나 자료구조와 알고리즘 - (5) 빅 오를 사용하거나 사용하지 않는 코드 최적화 (0) | 2023.09.10 |