enQueue(item)
: 큐의 가장 꼬리에 원소를 삽입하는 연산
deQueue()
: 큐의 앞쪽에서 원소를 삭제하고 반환하는 연산
createQueue()
: 큐의 생성자, 공백 상태의 큐를 생성
isEmpty()
isFull()
: 큐가 포화 상태인지 확인하는 연산
Qpeek()
: 큐의 앞쪽에서 원소를 삭제 없이 반환하는 연산
(2)의 그림을 보면, rear 는 마지막 데이터의 인덱스를 가르킨다.
또한 front 는 가장 앞의 데이터 인덱스 -1이 된다. Queue의 사이즈는 rear-front가 된다.
(7)에서 보면, 모두 삭제가 일어나게 되면, front와 rear는 같은 위치가 된다.
(삭제 : front-- / 삽입 : rear++)
큐의 크기는 배열의 크기와 동일하다
초기에는 front 와 rear 는 -1로 되어있고, 이와 같이 front와 rear가 같다면 공백 상태로 본다.
rear == n-1
(n:배열의 크기, n-1 배열의 마지막 인덱스) 의 경우 포화 상태로 본다.
static String[] queue = new String[10];
static int front = -1;
static int rear = -1;
// 삽입 성공 여부를 반환하는 boolean 타입도 가능
static void enQueue(String item) {
if(isFull()) {
System.out.println("큐가 가득 찼습니다.");
return;
}
queue[++rear] = item;
}
static boolean isEmpty() {
if (front == rear) return true;
else return false;
// return front == rear
// 이라는 간단한 식으로 해도 된다.
}
static boolean isFull() {
return rear == queue.length - 1;
}
static String deQueue() {
if(isEmpty()) {
System.out.println("큐가 비어있습니다.");
return null;
}
String item = queue[++front];
return item;
}
static String Qpeek() {
if(isEmpty()) {
System.out.println("큐가 비어있습니다.");
return null;
}
String item = queue[front + 1];
return item;
}
static int size() {
return rear - front;
}
(i = (i+1)%N)
으로 인덱스 진행을 하면 된다. public class Queue_큐API {
public static void main(String[] args) {
// Queue<Integer> queue = new Queue<>();
// 큐는 인터페이스이기 때문에, 구현체로 만들 수 없다.
Queue<Integer> queue = new LinkedList<>();
// 삽입
queue.add(1); // 추가될 수 없는 상태면 예외 발생을 시킨다.
queue.offer(1); // 추가될 수 없으면 return false
System.out.println(queue);
// 삭제
queue.remove(); // 큐가 비어있으면, 예외 발생
queue.poll(); // 삭제될 수 없으면 return null
// 조회
queue.element(); // 예외 발생
queue.peek(); // return null
}
}
import java.util.LinkedList;
import java.util.Queue;
import java.util.Scanner;
class Person{
int no;
int cnt;
public Person (int no,int cnt) {
this.no = no;
this.cnt = cnt;
}
@Override
public String toString() {
return "마이쮸 현황 : " + no + "번째의 사람이, " + cnt + "개 갖고 가져갔습니다.";
}
}
public class Queue_마이쮸 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Queue<Person> queue = new LinkedList<>();
System.out.print("몇 개의 마이쮸를 나눠 가질 건가요? >> ");
// 전체 마이쮸 갯수
int N = sc.nextInt();
int pNum = 1;
queue.add(new Person(pNum++, 1));
System.out.println();
while (N > 0) {
// 큐에서 한 명이 빠져나와 마이쮸를 갖고 간다.
Person p = queue.poll();
N -= p.cnt;
System.out.println(p.toString());
System.out.println("남은 마이쮸는 " + N + "개");
if (N <= 0) {
System.out.println(p.no + "번이 마지막을 갖고 갔습니다.");
break;
}
p.cnt++;
// 갖고 갈 수 있는 갯수를 늘리고 삽입
queue.add(p);
// 새 멤버 추가
queue.add(new Person(pNum++, 1));
}
}
}
마이쮸 나눠 갖기.