본문 바로가기

Algorithm

큐(Queue)

큐(Queue)

  • 데이터를 일시적으로 쌓아 두기 위한 자료구조 
  • 선입선출(First In First Out) 구조 
  • 인큐(enqueue) - 데이터를 넣는 작업
  • 디큐(dequeue) - 데이터를 꺼내는 작업 
  • 프런트(front) - 데이터를 꺼내는 쪽 
  • 리어(rear) - 데이터를 넣는 쪽 
  • offer() - 값 넣기 
  • poll() - 값 꺼내기 

 

큐 선언 

 

ex) 

import java.util.Queue;
import java.util.LinkedList;

Queue<Integer> queue = new LinkedList<>();
queue.offer(1); // 1넣기
queue.offer(2); // 2넣기 

int num = queue.poll(); //queue의 맨 앞 값 꺼내기 
queue.peek();  //맨 앞의 값 확인하기

 

배열로 큐 만들기 

 

public class IntQueue {

    private int max;    // 큐의 용량
    private int front;  // 첫 번째 요소 커서
    private int rear;   // 마지막 요소 커서
    private int num;    // 현재 데이터 수
    int[] que;  // 큐 본체

    public int add(int x) {
       if (num >= max)
          System.out.println("꽉 찼습니다.");
       que[rear++] = x;
       num++;

       if(rear == max)
          rear = 0;

       return x;
    }

    public int poll() {
        if (num <= 0)
            System.out.println("데이터가 없네요;;");
        int x = que[front++];
        num--;

        if (front == max)
            front = 0;

        return x;
    }

    // 큐에서 데이터를 피크(프런트 데이터를 들여다 봄)
    public int peek() {
        if (num <= 0)
            System.out.println("데이터가 없네요;;");
        return que[front];
    }

    // 큐를 비움
    public void clear() {
        num = front = rear = 0;
    }

    // 큐의 용량을 반환
    public int capacity() {
        return max;
    }

    // 큐에 쌓여 있는 데이터 수를 반환
    public int size() {
        return num;
    }

    // 큐가 비어 있나요?
    public boolean isEmpty() {
        return num <= 0;
    }

    // 큐가 가득 찼나요?
    public boolean isFull() {
        return num >= max;
    }

    // 큐안의 모든 데이터를 프런트 -> 리어 순으로 출력
    public void dump() {
        if (num <= 0)
            System.out.println("큐가 비어 있습니다.");
        else {
            for(int i = 0 ; i < num ; i++)
                System.out.print(que[(i + front) % max]);
            System.out.println();
        }
    }

    public IntQueue(int capacity) {
        num = front = rear = 0;
        max = capacity;
        try {
            que = new int[max];
        } catch (OutOfMemoryError e) {
            max = 0;
        }
    }
}

 

 

 

'Algorithm' 카테고리의 다른 글

스택으로 재귀함수를 비재귀적으로 구현하기  (0) 2022.06.18
재귀 알고리즘  (0) 2022.06.18
스택(Stack)  (0) 2022.06.08
Arrays.binarySearch  (0) 2022.06.06
검색(선형 검색, 보초법,이진 검색  (0) 2022.06.06