* LinkedList로 만들면 큐는 상당히 간단하다
* 하지만 배열로 만들면 조.금 까다롭다.
* Java API 로 구현된 Queue를 확인해보면 Array, LinkedList 로 구현된 구현체들이 존재한다.
* 하지만 나는 복잡한건 좋아하지 않으므로 LinkedList로 구현
package algo.queue; public class MyQueue<E> { private MyQueueNode<E> front; private MyQueueNode<E> rear; private int size; public E enqueue(E item) { MyQueueNode<E> newNode = new MyQueueNode<>(item); if(front == null) { front = rear = newNode; }else { rear.setNext(newNode); rear = newNode; } size++; return item; } public E dequeue() { if(isEmpty()) return null; E item = front.getItem(); if (front == rear) front = rear = null; else front = front.getNext(); size--; return item; } public E peek() { if(isEmpty()) return null; return front.getItem(); } public boolean isEmpty() { return size == 0; } public int getSize() { return size; } @Override public String toString() { StringBuilder builder = new StringBuilder(); if(front != null) builder.append("FRONT : " + front + "\nREAR : " + rear + "\n"); MyQueueNode<E> search = front; while (search != null) { builder.append(search.toString()); builder.append("\n"); search = search.getNext(); } builder.append("total size = " + size); builder.append("\n-----------------------\n"); return builder.toString(); } }Node 클래스
package algo.queue; public class MyQueueNode<E> { private E item; private MyQueueNode<E> next; public MyQueueNode(E item) { this.item = item; } public E getItem() { return item; } public MyQueueNode<E> getNext() { return next; } public void setNext(MyQueueNode<E> next) { this.next = next; } @Override public String toString() { String nextItem = next != null ? next.getItem().toString() : null; return String.format("MyQueueNode [item=%s, next=%s]", item, nextItem); } }테스트
import algo.queue.MyQueue; public class Main { public static void main(String[] args) { MyQueue<String> queue = new MyQueue<>(); System.out.println(queue); queue.enqueue("1"); System.out.println(queue); queue.enqueue("2"); queue.enqueue("3"); System.out.println(queue); System.out.println("* PEEK : " + queue.peek()); System.out.println(queue); System.out.println("* DEQUE : " + queue.dequeue()); System.out.println(queue); System.out.println("* DEQUE : " + queue.dequeue()); System.out.println(queue); System.out.println("* DEQUE : " + queue.dequeue()); System.out.println(queue); } } <결과> total size = 0 ----------------------- FRONT : MyQueueNode [item=1, next=null] REAR : MyQueueNode [item=1, next=null] MyQueueNode [item=1, next=null] total size = 1 ----------------------- FRONT : MyQueueNode [item=1, next=2] REAR : MyQueueNode [item=3, next=null] MyQueueNode [item=1, next=2] MyQueueNode [item=2, next=3] MyQueueNode [item=3, next=null] total size = 3 ----------------------- * PEEK : 1 FRONT : MyQueueNode [item=1, next=2] REAR : MyQueueNode [item=3, next=null] MyQueueNode [item=1, next=2] MyQueueNode [item=2, next=3] MyQueueNode [item=3, next=null] total size = 3 ----------------------- * DEQUE : 1 FRONT : MyQueueNode [item=2, next=3] REAR : MyQueueNode [item=3, next=null] MyQueueNode [item=2, next=3] MyQueueNode [item=3, next=null] total size = 2 ----------------------- * DEQUE : 2 FRONT : MyQueueNode [item=3, next=null] REAR : MyQueueNode [item=3, next=null] MyQueueNode [item=3, next=null] total size = 1 ----------------------- * DEQUE : 3 total size = 0 -----------------------
'Data Structure - Using java' 카테고리의 다른 글
Stack - Created as Array (0) | 2018.05.24 |
---|---|
Doubly Linked List (0) | 2018.05.23 |
Linked List (0) | 2018.05.22 |