package datastructure.chap05.queue;
class QueueNode {
private int item;
private QueueNode link;
public int getItem() {
return item;
}
public void setItem(int item) {
this.item = item;
}
public QueueNode getLink() {
return link;
}
public void setLink(QueueNode link) {
this.link = link;
}
}
public class Queue {
private QueueNode front; // 맨 앞 노드를 감시
private QueueNode rear; // 맨 뒤 노드를 감시
public Queue(){
front = new QueueNode();
rear = new QueueNode();
}
// 큐가 비어있는지 확인
public boolean isEmpty() {
return front.getLink() == null;
}
// 큐에 데이터 추가(rear쪽으로)
public void add(int item){
QueueNode newNode = new QueueNode();
newNode.setItem(item); // 새 노드에 자료 저장
//링크 연결
if(isEmpty()) {// 첫번째 노드가 저장되는 경우
front.setLink(newNode);
rear.setLink(newNode);
} else { // 기존 노드에 연결되는 경우
// 추가되기전 마지막 노드
QueueNode lastNode = rear.getLink();
lastNode.setLink(newNode);
rear.setLink(newNode);
}
}
// 큐에서 데이터 제거(front쪽으로)
public Integer poll(){
if(isEmpty()) {
System.out.println("queue is empty");
return null;
} else {
// 삭제 대상 가져오기
QueueNode delTarget = front.getLink();
// front가 삭제 대상 뒤에 있는 노드를 감시
front.setLink(delTarget.getLink());
return delTarget.getItem();
}
}
// 큐에서 데이터 출력(front쪽으로)
public Integer peek(){
if(isEmpty()) {
System.out.println("queue is empty");
return null;
} else {
// 출력 대상 가져오기
QueueNode delTarget = front.getLink();
return delTarget.getItem();
}
}
}
package datastructure.chap05.queue;
public class Main {
public static void main(String[] args) {
//새로운 큐 생성
Queue queue = new Queue();
// 큐에 자료 넣기
for (int i = 0; i <= 5; i++) {
queue.add(i*3);
}
// 큐의 모든 자료를 삭제하면서 출력
while(!queue.isEmpty()) {
System.out.println(queue.poll());
}
}
}
package datastructure.chap05.queue;
import java.util.LinkedList;
import java.util.Queue;
public class QueueExample {
public static void main(String[] args) {
// 큐 생성
Queue<Integer> que = new LinkedList<>();
// 큐에 데이터 넣기
for (int i = 1; i <= 5; i++) {
que.add(i * 3);
}
// 큐의 사이즈 제공
System.out.println("저장된 개수: " + que.size());
// 큐에서 하나 삭제
int removed = que.poll();
System.out.println("removed = " + removed);
// 큐 전체 보기
System.out.println(que.toString());
// 전체 삭제
while (!que.isEmpty()) {
System.out.println(que.poll());
}
System.out.println(que);
}
}
'알고리즘' 카테고리의 다른 글
java_정렬(선택정렬)_22.06.13(day15) (0) | 2022.06.13 |
---|---|
java_정렬(버블정렬)_22.06.13(day15) (0) | 2022.06.13 |
java_자료구조(stack)_22.06.09(day13) (0) | 2022.06.09 |
java_투_포인터_22.06.08(day12) (0) | 2022.06.08 |
java_알고리즘(구간합)_22.06.02(day11) (0) | 2022.06.03 |