본문 바로가기

Study/코딩스터디_TIL

[JAVA 스터디] Queue 개념

 Queue 

  : 선입 선출(FIFO: First In First Out)의 성격을 지닌 자료구조

[자료구조] 큐(Queue)에 대한 설명글

 

[자료구조] 큐(Queue)

큐 (Queue)  - 스택과 마찬가지로 삽입과 삭제의 위치가 제한된 유한 순서 리스트  - 선입선출 구조(FIFO, First-In-First-Out) : 삽입 순으로 나열되어 가장 먼저 삽입한 원소가 가장 먼저 삭제된다. 삭제

kwin0825.tistory.com

 

 선언 

import java.util.Queue;

import java.util.LinkedList;

 

Queue<자료형> 변수명 = new LinkedList<>();

  ㄴ 위 같은 경우는 자료형에 넣은 자료형만 삽입, 삭제 가능

Queue 변수명 = new LinkedList();

  ㄴ 위 같은 경우는 어떤 자료형이든 삽입, 삭제 가능(이전에 int형을 넣었어도 String형 삽입 가능)


 메서드 (Method) 

Queue<자료형> q = new LinkedList<>();

1. 삽입                                                                       

q.add(삽입할 value);

  ㄴ 반환 값(boolean): 삽입 성공 시 true / 실패 시  Exception발생

 

q.offer(삽입할 value);

  ㄴ 반환 값(boolean): 삽입 성공 시 true / 실패 시 false 반환

 

2. 삭제                                                                       

q.remove();

  ㄴ 반환 값(삭제된 value의 자료형): 삭제된 value / 공백 큐이면 Exception("NoSuchElementException") 발생

 

q.remove(삭제할 value);

  ㄴ 반환 값(boolean): 큐에 해당 value가 존재하면 해당 값 삭제 후 true / 존재하지 않으면 false 반환

 

q.poll();

  ㄴ 반환 값(삭제된 value의 자료형): 삭제된 value / 공백 큐이면 null 반환

 

3. 큐의 front에 위치한 value 반환                                        

q.element();

  ㄴ 반환 값(큐 head에 위치한 value의 자료형): 큐 head에 위치한 value / 공백 큐이면 Exception("NoSuchElementException") 발생

 

q.peek();

  ㄴ 반환 값(큐 head에 위치한 value의 자료형): 큐 head에 위치한 value / 공백 큐이면 null 반환

 

4. 큐 초기화(= 공백 큐 만들기)                                         

q.clear();

  ㄴ 반환 값(void): X

 

5. 큐 크기                                                                      

q.size();

  ㄴ 반환 값(int): 큐 사이즈 반환

 

6. 큐에 해당 원소가 존재하는지?                                       

q.contains(찾을 value);

  ㄴ 반환 값(boolean): 해당 값이 존재할 때 true / 해당 값이 없을 때 false 반환

 

7. 공백 큐인가?                                                               

q.isEmpty();

 

 

 

 

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.LinkedList;
import java.util.Queue;
import java.util.StringTokenizer;

public class Main {
	
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		int N = Integer.parseInt(br.readLine());
		StringBuilder sb = new StringBuilder();
		Queue<Integer> que = new LinkedList<Integer>();
		int last = 0;
		
		for(int i = 0; i < N; i++) {
			StringTokenizer st = new StringTokenizer(br.readLine());
			String S = st.nextToken();
			
			switch(S) {
			case "push" :
				last = Integer.parseInt(st.nextToken());
				que.offer(last);
				break;
			case "pop" :
				if(que.isEmpty()) sb.append(-1).append("\n");
				else sb.append(que.poll()).append("\n");
				break;
			case "size" :
				sb.append(que.size()).append("\n");
				break;
			case "empty" :
				if(que.isEmpty()) sb.append(1).append("\n");
				else sb.append(0).append("\n");
				break;
			case "front" :
				if(que.isEmpty()) sb.append(-1).append("\n");
				else sb.append(que.peek()).append("\n");
				break;
			case "back" :
				if(que.isEmpty()) sb.append(-1).append("\n");
				else sb.append(last).append("\n");
				break;
			}
		}
		System.out.println(sb);
	}
	
}
728x90