여러 데이터의 묶음을 저장하고, 사용하는 방법을 말하낟
문자, 숫자, 그림, 소리, 영상 등 실생활을 구성하고 있는 모든 값이다
심지어 우리도 데이터로써 나이, 키, 집 주소, DNA 까지 데이터로 분류가 가능하다.
그렇지만 데이터만 가지고는 어떤 정보를 가지고 있기 무리가 있다.
예를 들어 나이
데이터만을 가지고 있다면, 사람의 나이인지, 동물의 나이인지, 나무의 나이인지 알 수 없다.
그러니 데이터는 분석을 하고 정리해서 활용해야만 의미를 가진다.
앞으로 꾸준히 등장하는 네 가지의 자료구조
자료 구조는 특정한 상황에 놓인 문제를 해결하는데 특화되어있으며, 많은 자료구조를 알아두면, 어떤 상황이 오더라도 적합한 자료구조를 빠르고 정확히 적용해 문제를 해결할 수 있다.
👉🏼 자료구조는 문제 해결력을 필요로 하는 알고리즘 테스트와 굉장히 밀접하게 연관되어있다.
Stack은 사전적으로 쌓다,쌓이다 라는 뜻을 가지고있으며
자료구조에서도 그대로 데이터를 순서대로 쌓는다.
Stack의 특징
👉🏼 입력과 출력이 하나의 방향으로만 이루어져있어 접근이 제한적이다.
Stack 자료구조의 정책
LIFO (Last In First Out) / FILO (First IN Last Out)
<이미지 추가 예정>
Stack<Integer> list = new Stack<>(); // Integer타입 스택 선언
list.push(4);
list.push(3);
list.push(2);
list.push(1);
-----------------
4 <- 3 <- 2 <- 1
-----------------
push로 들어간 순대로, 4번이 제일 먼저 들어가고, 1번이 가장 마지막에 들어간다.
list.pop();
4 3 2 -> 1
list.pop();
4 3 -> 2
list.pop();
4 -> 3
list.pop();
-> 4
1, 2, 3, 4
제일 마지막에 있던 1있던 1부터 순서대로 리턴된다.
Stack 자료구조는 데이터가 아무리 많이 존재하더라도, 하나씩 데이터를 넣고 뺀다
Stack 자료구조는 데이터의 입출력 방향이 같다. 만약 입출력 방향이 어러 개면 Stack 자료구조로 볼수 없다.
Queue는 사전적으론 줄을 서서 기다리다, 대기 행렬의 뜻을 가지고있다.
Queue 와 Stack은 반대의 개념이다.
Queue는 Stack 상반되게
👉 데이터가 입력된 순서대로 처리할 때 주로 사용
Queue는 먼저 들어간 데이터가 먼저 나오는 FIFO (First In First Out)/ LILO (Last In Last Out)의 특징이 있다.
<이미지 추가 예정>
Queue<Integer> queue = new Queue<>(); Integer타입의 queue 선언
queue.add(1);
queue.add(2);
queue.add(3);
queue.add(4);
출력방향<--------------------- < 입력 방향
1 <- 2 <- 3 <- 4
---------------------
queue.poll();
1<- 2 3 4
queue.poll();
2<- 3 4
queue.poll();
3<- 4
queue.poll();
4<-
1, 2, 3, 4
첫번째 있던 데이터부터 입력한 순서대로 나오게 된다.
Stack과 동일하게 Queue 자료구조 역시 데이터가 아무리 많아도 하나씩 넣고 빼기만 가능하다
Stack과 비견되게 Queue 자료구조는 데이터의 입력, 출력 방향이 다르다, 만약 입출력 방향이 같으면 Queue로 볼수 없다.
add(): 큐에 데이터를 추가한다.
poll(): 가장 먼저 추가된 데이터를 큐에서 삭제하고 삭제한 데이터를 리턴한다.
size(): 큐에 추가된 데이터의 크기를 리턴한다.
peek(): 큐에 가장 먼저 추가된 데이터를 리턴한다.
show(): 큐에 들어있는 모든 데이터를 <> 타입으로 변환하여 리턴한다.
clear(): 큐에 들어있는 모든 데이터를 삭제