스택은 자료(데이터)를 순서대로 쌓아올리는 자료구조이다.
만약 배열 {1,2,3,4,5} 이 있다고 친다면, 이데이터들은 순서대로 1부터 5까지 순서대로 들어왔을 것이다. 그리고 우리가 상식적으로 빠져나간다고 생각하면 당연히 1부터 빠져나가는게 맞지만, Stack자료구조에서는 마지막으로 들어온 데이터가 먼저 밖으로 나가게 된다.
다시 돌아와서 1,2,3,4,5가 순서대로 들어왔다면 나갈때는 5,4,3,2,1 이렇게 반대로 나가게 된다.
스택은 대표적으로 웹사이트의 뒤로가기 앞으로가기에 사용된다. 위에서 언급한것처럼 우리가 뒤로가기를 누르면, 우리가 현재 페이지에 있기전의 페이지로 돌아가고 그상태에서 앞으로 가기를 누르면 현재 페이지로 돌아온다.
앞으로가기 스택과 뒤로가기 스택이 있다고 한다면 현재페이지에서 뒤로가기 스택에 있는 페이지로 가면, 앞으로가기 스택에는 방금전에 있던 페이지가 등록이 될것이다. 하지만, 현상태에서 다른페이지로 들어가게된다면, 앞으로가기 스택에 남아있던, 페이지들은 초기화가 되어버린다. 궁금하면, 직접 웹사이트에서 시도해보자.
스택은 자바에서 클래스로 만들어준 자료구조이다. 따라서 이미 구현된 메서드를 사용하면된다.
위 공식문서 내용처럼 이미 구현된 메서드는 아래와 같다.
1. empty() : Stack이 비어있는지에 대한 유무를 리턴.
2. peek() : 맨 마지막으로 들어온 데이터를 리턴.
3. pop() : 맨 마지막으로 들어온 데이터를 삭제하며 그값을 리턴.
4. push(E item) : 인자값에 있는 데이터를 Stack 자료구조에 추가한다.
5. search(Object o) : Stack 자료구조 내부에 매개변수의 데이터가 몇번째 인덱스에 있는지 출력한다. 만약 없다면, -1을 출력함.
큐(Queue)는 줄을 서서 기다리다, 대기행렬 이라는 뜻을 가지고 있다. 따라서 우리가 익히 알고있는 방식, 먼저 들어온사람이 먼저 나간다.
1,2,3,4,5 의 데이터가 들어왔을때 먼저 들어온 순서대로 1,2,3,4,5 이렇게 출력된다.
큐는 대표적으로 프린터기에서 사용된다. 프린터를 사용할때 복사할 내용을 프린터기에 옮긴다. 그리고 프린터기는 먼저 들어온 데이터를 출력한다.
프린터기는 외부로 부터 복사 할 내용을 입력받고 먼저 들어온 순서대로 프린터하여 출력한다. 만약 프린터기가 스택자료구조를 사용한다면, 우리는 복사 할 내용을 모두 프린터기에 입력한뒤 순서가 뒤집힌 상태로 출력받게 될것이다. ( 생각보다 편할수도 있을것 같다. ??????)
아쉽게도 큐는 클래스가 아니다. 자바에서 큐를 인터페이스로 만들어준 자료구조이기 때문에 생성자를 이용해서 직접 객체를 생성할 수 없다. 먼저 공식문서를 보자.
위 사진을 자세히 보면 다행히도 이미 구현되어있는 클래스가 있다. 그중 눈에 띄는게 LinkedList이다. 이전에 배운 LinkedList를 이용하면 Queue를 구현할수있는것이다.
아까 말했듯이 LinkedList를 사용하거나 그외 이미 Queue를 구현해준 클래스를 이용하면, Queue의 메서드를 이용할 수 있다.
위의 공식문서에서는 적혀있지않지만, 자세히 보면 추가, 삭제, 검색 기능들이 2개씩 존재하고 있는걸 확인할수있을것이다.
그이유는 *예외를 발생시키느냐 안시키느냐 차이이다.
아래의 3개 메서드를 사용할 때는 try catch로 감싸주어야 한다.