이번에는 Java 공부중에 대표적인 자료구조 Stack, Queue에 대해서 알아보려고 한다. 🤣🤣
Stack은 단어 그대로 '쌓다' 라는 의미에 가장 적합한 자료구조이다.
데이터가 차곡차곡 쌓이기 때문에 처음 저장된 데이터는 다른 모든 데이터들을 다 꺼내고 나서야 마지막으로 꺼낼 수 있다는 점이 특징적이다.
대신, 마지막으로 저장된 데이터는 다른 데이터들을 꺼내지 않고도 처음으로 꺼낼 수 있다는 점이 특징적이다.
이를 영어로 하면 LIFO(Last In First Out) 라고 하는데 영어 단어의 뜻을 알아두면 이해하기가 어렵지 않다.
Queue는 '줄줄이 연필'을 알고있다면 좀 더 쉽게 이해할 수 있는 자료구조이다.
데이터가 쌓이는 방향 과 데이터를 꺼내는 방향 이 서로 반대이기 때문에, 처음 저장된 데이터는 다른 데이터에 밀려나가고 있으므로 맨 처음 꺼낼 수 있다는 점이 특징적이다.
그대신 마지막으로 저장된 데이터는 다른 데이터들을 꺼낸 다음 마지막으로 꺼낼 수 있다는 점이 특징적이다.
이를 영어로 하면 FIFO(First In First Out) 라고 하는데 영어 단어의 뜻을 알아두면 이해하기가 어렵지 않다.
Queue<Integer> que = new LinkedList<>();
Stack<Integer> stac = new Stack<>();
// 큐에 데이터 집어넣기
que.add(); //add는 값을 집어넣고, 큐가 꽉찼을 때 error 발생
que.offer(); //offer는 값을 집어넣고, 큐가 꽉찼을 때 false를 리턴
// 큐에서 데이터 가져오기(with 삭제)
que.remove(); //remove는 데이터를 확인하고 제거, 비어있을 경우 error 발생
que.poll(); //poll은 데이터를 확인하고 제거, 비어있을 경우 null 리턴
que.clear(); //큐 데이터 삭제(비우기)
// 큐에서 데이터 가져오기(삭제 없이)
que.element(); //element는 큐 제일 앞에있는 값 확인, 비어있을 경우 error 발생
que.peek(); //peek는 큐 제일 앞에있는 값 확인, 비어있을 경우 null 리턴
// 스택에 데이터 집어넣기
stac.push();
stac.add();
// 스택에서 데이터 가져오기(with 삭제)
stac.remove();
stac.pop();
// 스택에서 데이터 가져오기(삭제없이)
stac.peek();
스택도 큐와 동일하게 사용되는데 add와 remove, peek, clear 정도는 공통적으로 사용이 되고, offer, poll, push, pop은 각각 특징적으로 사용이 되는것을 확인할 수 있다.
Deque도 정리해보려고 했더니 Deque도 다르지는 않지만 사용법이 조금 더 어려워서 헷갈릴까봐 일단 다음에 정리해보려고 한다🤣🤣 Deque는 Queue가 양쪽으로 있는 느낌이다!(양쪽으로 데이터를 넣고 뺄 수 있는 점이 다른점)