Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 티스토리챌린지
- 알고리즘
- 자료구조
- 혼공단
- 안드로이드
- 프로그래머스
- MySQL
- 정처기
- 자바
- 카카오코테
- 스터디
- 정보처리기사
- select
- join
- doitandroid
- 코틀린
- 안드로이드스튜디오
- Android
- Kotlin
- 오블완
- 코테
- 인프런
- groupby
- SQL
- java
- 혼공챌린지
- Til
- CS
- 기술면접
- 혼공파
Archives
- Today
- Total
Welcome! Everything is fine.
#11. Stack과 Queue의 차이 본문
728x90
스택(Stack)
스택은 한쪽 끝에서만 데이터를 넣고 뺄 수 있는 자료구조이다. 다시 말해 후입선출(LIFO, Last-In-First-Out) 구조로, 왼쪽 그림과 같이 가장 마지막에 들어간 데이터가 가장 먼저 나오는 자료구조이다. 쌓아올려진 팬케이크를 생각하면 쉽다. 가장 위에 있는 팬케이크 먼저 없어질 것이다. 이 외에도 웹 페이지에서 뒤로가기 버튼을 눌렀을 때, 문서를 작성하다가 Ctrl+Z를 눌렀을 때 등 스택이 활용되는 상황이 많다. 스택에서 데이터가 추가/제거되는 곳을 top이라고 한다.
스택 메서드
- Object pop() : 맨 위에 저장된 객체를 꺼내서 반환한다.
- Object push(Object item) : 새로운 객체를 맨 위에 저장한다.
- Object peek() : 맨 위에 있는 데이터를 본다. (데이터를 꺼내지는 않는다.)
- boolean isEmpty() : 스택이 비어있는지 확인한다.
스택의 성질
- 원소의 추가가 O(1)
- 원소의 제거가 O(1)
- 제일 상단의 원소 확인이 O(1)
- 제일 상단이 아닌 나머지 원소들의 확인/변경이 원칙적으로 불가능
스택의 장단점
- 장점 : 데이터의 삽입, 삭제, 접근이 빠르다.
- 단점 : top 위치 외 데이터의 접근이 원칙적으로 불가능하다.
스택의 활용
- DFS 알고리즘
- 재귀 알고리즘
- 수식 괄호 검사
- 역순 문자열 만들기
큐(Queue)
큐는 한쪽 끝에서 데이터를 넣고 반대쪽 끝에서 데이터를 뺄 수 있는 자료구조이다. 다시 말해 선입선출(FIFO, First-In-First-Out) 구조로, 오른쪽 그림과 같이 가장 먼저 들어간 데이터가 가장 먼저 나오는 자료구조이다. 비행기를 탈 때 탑승수속 줄을 생각하면 쉽다. 먼저 줄을 선 사람이 먼저 나올 것이다. 큐에서 데이터가 추가되는 곳을 rear, 제거되는 곳을 front라고 한다.
큐 메서드
- boolean add(Object o) : 새로운 객체를 맨 뒤에 추가한다.
- Object poll() : 맨 앞에 있는 객체를 꺼내서 반환한다.
- Object peek() : 삭제없이 요소를 읽어온다.
큐의 성질
- 원소의 추가가 O(1)
- 원소의 제거가 O(1)
- 제일 앞/뒤의 원소 확인이 O(1)
- 제일 앞/뒤가 아닌 나머지 원소들의 확인/변경이 원칙적으로 불가능
큐의 장단점
- 장점 : 데이터의 삽입, 삭제, 접근이 빠르다.
- 단점 : rear과 front 위치 외 데이터의 접근이 원칙적으로 불가능하다.
큐의 활용
- BFS 알고리즘
- 캐시 구현
- 프로세스 관리
- 우선순위가 같은 작업 예약
스택과 큐의 차이
스택은 입력과 출력이 한 곳에서 이루어지는 자료구조로, LIFO 구조라고도 불린다. 마지막에 들어간 데이터가 먼저 나오는 자료구조이다. 큐는 입력과 출력이 양 쪽 끝에서 이루어지는 자료구조로, FIFO 구조라고도 불린다. 먼저 들어간 데이터가 먼저 나오는 자료구조이다.
'CS 스터디' 카테고리의 다른 글
#13. 트리(Tree) (1) | 2024.02.27 |
---|---|
#12. 배열(Array)과 연결 리스트(LinkedList) (0) | 2024.02.20 |
#10. 스케줄러의 종류 (0) | 2024.02.13 |
#09. RESTful API 정리 (0) | 2024.02.13 |
#08. TCP와 UDP의 특징 및 차이 (1) | 2024.02.07 |