🔥 Vamos/Java

1103 | 자바의 정석 기초편 :: ch11-15~11-21

unikue 2022. 11. 3. 22:05

스택과 큐 (Stack & Queue)

 

✔ 스택 (Stack)

: 밑이 막힌 상자

: LIFO구조. Last in First Out. 마지막에 저장된 것을 제일 먼저 꺼내게 된다.

: 넣는걸 push, 꺼내는걸 pop

: 배열이 유리

 

✔ 큐(Queue)

: 줄서기

: FIFO구조. First in FIrst out. 제일 먼저 저장한 것을 제일 먼저 꺼내게 된다.

: 넣는걸 offer, 꺼내는걸 poll

: LinkedList가 유리

 

 


스택과 큐의 메서드

 

✔ Stack의 메서드

: 스택은 클래스이므로 Stack st = new Stack(); 객체생성 가능.

메서드 설명
boolean empty() stack이 비어있는지 알려준다
Object peek() // 맨위 객체를 보기만 함 Stack의 맨 위에 저장된 객체를 반환. pop()과 달리 Stack에서 객체를 꺼내지 않음.
(비었을때는 EmptyStackException 발생)
Object pop() // 삭제 Stack 의 맨 위에 저장된 객체를 꺼낸다. 
비었을때는 EmptyStackException발생
Object push(Object item) // 추가 Stack에 item 객체 저장
int search(Obejct o)
// Arrays.indexOf()와 비슷
Stack에서 주어진 객체(o)를 찾아서 그 위치를 반환
못찾으면 -1 반환
배열과 달리 위치는 0이 아닌 1부터 시작

 

 

✔ Queue의 메서드

: Queue는 인터페이스이므로 Queue q = new Queue(); 불가. 객체생성 불가.

: Queue를 직접 구현하던가 Queue를 구현한 클래스를 사용. (클래스는 java api에서 Queue를 조회하면 Implementing classes가 있음)

: LinkedList가 대표적. Queue q = new LinkedList(); q.offer("0");

  메서드 설명
예외 발생

boolean add(Object o)
// 추가 & 예외발생
지정된 객체를 Queue에 추가. 성공하면 true
저장공간 부족시 illegalStateException발생
Object Remove()
// 삭제 & 예외발생 (try-catch로처리)
Queue에서 객체를 꺼내 반환
비어있으면 noSuchElementException 발생
Object element() 삭제 없이 요소를 읽어온다.
peek과 달리 queue가 비었을때 NoSuchElementException발생
예외 없음

이 세개를 중점으로 보기

boolean offer (Object o)
// 추가 & 예외없음
Queue에 객체를 저장. 성공하면 true, 실패하면 false 반환
Object poll()
// 삭제 & null만 반환하고 예외없음
if(obj==null) > 예외 처리 
Queue에서 객체를 꺼내서 반환. 비어있으면 null 반환
Object peek()  삭제 없이 요소를 읽어온다. Queue가 비어있으면 null 반환

 

✔스택의 활용 예

: 수식계산, 수식괄호검사, 워드프로세서의 undo/redo, 웹브라우저의 뒤로/앞으로

 

✔ 큐의 활용 예

: 최근 사용문서, 인쇄작업 대기목록, 버퍼(buffer)