티스토리 뷰
Stack
- 선형 자료구조의 일종으로 후입 선출(Last In First Out :LIFO) 방식이다. 즉, 나중에 들어간 원소가 먼저 나오는 특징을 가지고 있다.
- 데이터를 쌓아 올리는 구조로 먼저 Stack에 들어간 데이터는 맨 바닥에 깔린다. 따라서 늦게 들어간 원소는 맨 위에 놓이게 되고 호출시 가장 먼저 나가게된다.
- 입력(push), 출력(pop-java에서는 poll), 가장 위에 있는 데이터 확인(peek), 해당 값이 스택에서 몇번째 있는지(search) 등이 있다.
- 스택은 Random Access(비순차적 접근)이 불가능하다.
- 삽입/삭제는 O(1)의 시간 복잡도를 갖는다.
- 스택은 재귀 알고리즘을 사용할 때 유용하다.
- 재귀적으로 함수를 호출해야하는 경우, 임시 데이터를 스택에 넣고 재귀 함수를 빠져나와 백트레킹을 할 때는 스택에 넣어 주었던 임시 데이터를 빼줘야한다.
- 한 번 재귀 호출이 일어날 때 마다 계속 스택에 쌓아가므로 신중하게 사용해야한다.
더보기
public class mStack {
private static class StackNode {
private T data;
private StackNode next;
public StackNode(T data) {
this.data = data
}
}
private StackNode top;
public T pop() {
if (top == null) throw new EmptyStackException();
T item = top.data;
top = top.next;
return item;
}
public void push(T item) {
StackNode t = new StackNode(item);
t.next = top;
top = t;
}
public T peek() {
if(top == null) throw new EmptyStackException();
return top.data;
}
public boolean isEmpty() {
return top == null;
}
}
Queue
- 선형 자료구조의 일종으로 선입선출(First In First Out :FIFO) 방식이다. 즉, 먼저 들어간 요소가 먼저 나온다.
- 데이터가 큐로 들어오는 동작(enqueue), 큐에서 나가는 동작은(dequeue)이다.
- 보통 큐는 연결 리스트(LinkedList)를 사용하여 구현한다.
- 큐는 BFS, 캐시를 구현할 때 주로 사용된다. (BFS 경우 처리해야하는 노드의 리스트를 저장하는 용도로 큐를 사용한다.)
- 참고로 Java Collection 에서 Queue 는 인터페이스이다. 이를 구현하고 있는 Priority queue등을 사용할 수 있다.
- 큐는 여러가지 종류가 존재하는데 원형 큐, 우선순위 큐, 데크(Deque) 등이 있다.
- 참고로 자바의 컬랙션 중 큐에 대한 시간 복잡도 정리는 다음을 참고하길 바란다.
더보기
public class mQueue {
private static class QueueNode {
private T data;
private QueueNode next;
public QueueNode(T data) {
this.data = data;
}
private QueueNode first;
private QueueNode last;
public void add(T item) {
QueueNode t = new QueueNode(item);
if (last !== null) {
last.next = t;
}
last = t;
if (first == null) {
first = last;
}
}
public T remove() {
if (first == null) throw new NoSuchElementException();
T data = first.data;
first = first.next;
if (first == null) {
last = null;
}
return data;
}
public T peek() {
if (first == null) throw new NoSuchElementException();
return first.data;
}
public boolean isEmpty() {
return first == null;
}
}
}
원형 큐
- 원형 큐는 선형 큐를 쓰다보면 배열의 앞부분이 비게 되는 한계점을 해결하기 위해 구조화한 자료구조이다.
- 배열의 마지막 인덱스에서 다음 인덱스로 넘어갈 때 (rear+1) % 배열 사이즈 가되며 배열의 첫 인덱스부터 다시 데이터 삽입이 가능하다.
- 만약 큐가 포화상태이면 (rear+1) % 배열 사이즈 ==front 이면 enqueue가 실행되지 않는다.
우선순위 큐
- 우선순위 큐는 원소들에 우선순위를 매겨서 큐에 넣는다. 그래서 들어간 순서와 상관없이 뺄 때는 우선순위가 높은 원소부터 빠진다.
- 힙(Heap)을 구현할 때 주로 사용된다.
데크(Deque : Double Ended Queue)
- 데크는 양쪽에서 모두 삽입/인출이 가능한 큐이다.
- 스택과 큐의 장점을 가지고 만들어졌다.
- 입력이 한쪽에서만 가능하고 출력은 양쪽다 가능한 경우는 Scroll
- 출력이 한 쪽에서만 가능하고 입력이 양쪽에서 가능한 경우는 Shelf라고 한다.
추가로 공부하면 좋을 것
- Queue 를 사용하여 Heap 자료구조 구현하기
- Stack 두 개로 Queue 자료구조 구현하기
추가 개념
- 선형 자료구조 : 자료를 구성하는 데이터를 순차적으로 나열시킨 형태
- 비선형 자료구조 : 하나의 자료 뒤에 여러개의 자료가 존재할 수 있는 형태
참고
DS #3. 스택과 큐 (Stack and Queue)
이번에 살펴볼 부분은 스택과 큐이다. 스택 스택(Stack)은 후입선출(Last In First Out: LIFO)의 선형 자료구조이다. 데이터를 쌓아 올린다는 의미에서 더미(stack)라는 이름이 붙었다. 입력은 push, 출력은
devowen.com
JaeYeopHan/Interview_Question_for_Beginner
:boy: :girl: Technical-Interview guidelines written for those who started studying programming. I wish you all the best. :space_invader: - JaeYeopHan/Interview_Question_for_Beginner
github.com
'자료구조' 카테고리의 다른 글
[자료구조] 우선순위 큐 2 - 자바 (0) | 2021.02.16 |
---|---|
[자료구조] Hash/HashTable/HashMap (3) | 2020.08.13 |
[자료구조] 힙(Heep) & 우선순위 큐 (0) | 2020.02.24 |
[자료구조] HashTable 구현 (0) | 2020.01.06 |
[자료구조] LRU Cache 알고리즘 (0) | 2020.01.02 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 자료구조
- 우선순위큐
- 4-way-handshake
- MLQ
- 사회망서비스
- 기능개발
- 백트래킹
- N-Queen
- algorithm
- DFS
- 알고리즘
- SWExpert
- 3-way-handshake
- hash
- 네트워크
- Objective function
- 백 트래킹
- Android
- git
- MFQ
- 농협정보시스템IT
- programmers
- 프로세스 스케줄링
- hashtable
- java
- binarySearch
- SRTN
- Process Scheduling
- 프로그래머스
- loss function
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함