공부의 정리 및 복습을 위한 기록입니다.
Stack과 Queue 두 자료구조에 대해서 공부한 것을 정리하고자 한다.
우선 프로그래밍 언어를 떠나서 데이터 자료구조에는 스택 큐 데크 트리 등 여러 자료구조가 있다.
오늘은 그 중에서 스택 과 큐에 대하여 정리 및 자바에서는 어떻게 구현하고 어떤 메서드가 있는지 공부한 내용을 정리하려고 한다.
우선 스택은 LIFO(Last In First Out)구조를 가지고있다.

위 사진과 같이 데이터를 넣고 뺄 때 가장 마지막에 들어간 데이터부터 나오며 데이터의 입구와 출구가 한 개 밖이 없는 형태로 볼 수있다.
반면 큐는 FIFO(First IN First Out)구조를 가지고 있다.

위 사진과 같이 큐는 데이터가 들어간 순서대로 나오며, 입구와 출구가 하나의 통로로 연결되어 있는 형태이다. 유턴이 불가능한 터널의 형태로 볼 수 있다.
큐와 스택이 합쳐진 구조로 Depue도 있다. 이 데크는 나중에 CS부분 내용을 정리하면서 다른 자료구조들과 함께 자세하게 정리하도록 하겠다.
JAVA에서는 이러한 스택과 큐 자료구조를 이용한 클래스와 인터페이스를 제공한다.
우선 Stack 클래스이다.
Stack 클래스의 대표적인 메서드는
| 메서드 | 내용 |
|---|---|
| peek() | 저장된 객체 중 마지막(맨 위)에 저장된 객체를 반환 |
| push() | 객체를 저장 |
| pop() | 저장된 객체 중 마지막(맨 위)에 저장된 객체를 반환 후 삭제 |
| empty() | 저장된 객체가 있는지 없는지를 반환 |
| serch() | 주어진 객체를 찾아서 그 위치를 반환 객체가 없다면 -1를 반환 |
| remove() | 주어진 인덱스요소에 있는 객체를 반환 후 삭제 |
와 같이 있으며 다음 예제를 보면서 메서드를 익혀보도록 하겠다.
Stack<Integer> stack = new Stack<>();
stack.push(1);
stack.push(2);
stack.push(3);
stack.push(4);
System.out.println(stack.peek()); // 마지막에 들어간 요소 = 4
System.out.println(stack.pop()); // 마지막에 들어간 요소를 반환 = 4 후 삭제
System.out.println(stack.remove(1)); // 인덱스 1에 위치하는 요소를 반환 = 2 후 삭제
System.out.println(stack); // 모든 스택에 요소를 반환
위와 같이 코드를 실행 시킨다면
4
4
2
[1,3]
위와 같이 출력 되는것을 볼 수 있다.
다음은 Queue 인터페이스의 메서드이다.
자바에서 큐는 인터페이스의 형태로 제공되기 때문에
바로 사용할 수 없고 이것을 구현할 수 있는 구현클래스를 사용해야 한다. 여러 구현 클래스중 오늘은
Linkedlist를 이용하여 예제를 만들어 보았다.
다음은 큐의 대표적인 메서드이다.
| 메서드 | 내용 |
|---|---|
| peek() | 저장된 객체 중 처음에 저장된 객체를 반환 |
| offer() | 객체를 저장 성공 시 True, 실패 시 False 반환 |
| poll() | 저장된 객체 중 처음에 저장된 객체를 반환 후 삭제 |
| isEmpty() | 저장된 객체가 있는지 없는지를 반환 |
| contains() | 주어진 객체를 찾아서 있으면 True, 없으면 False 반환 |
위와 같은 메서드가 있다.
다음 예제 코드를 보며 메서드를 익혀보도록 하겠다.
Queue<Integer> queue = new LinkedList<>();
queue.offer(1);
queue.offer(12);
queue.offer(123);
queue.offer(1234);
System.out.println(queue.peek()); // 가장 처음 객체 = 1
System.out.println(queue.poll()); // 가장 처음 객체 = 1 반환 후 삭제
System.out.println(queue.contains(123)); // 123이 있는지 확인 True
System.out.println(queue); // 전체 리스트
위와 같이 코드를 작성 후 실행시키면 출력 결과는
1
1
True
[12, 123, 1234]
가 나오는 것을 볼 수있다.
이번에는 Stack과 Queue에 대한 자료구조와 JAVA에서 제공하는 클래스와 인터페이스, 메서드를 정리해 보았다. 다음에는 CS내용을 공부하면서 데이터 자료구조에 대하여 정리를 해보도록 하겠다.
공부하며 정리와 복습을 위해 저장한 기록입니다. 틀린 부분 및 개선할 부분이 있다면 알려주시면 감사하겠습니다 !