Table of Contents
목차
큐(Queue)
블록을 어떻게 하면 놓치지 않고 전부 저장할까?
• 블록 생성속도보다 거래 정보가 더 빨리 생성되면?
버퍼를 생성해 처리 대기열을 만듦
생성된 데이터를 처리할 수 있을 때까지 대기시킴
가장 오래된 데이터를 가장 먼저 지운다.
초록색 하나하나가 노드
다 링크로 연결되어있음
구현해야 하는 것
LinkedList 구현
[file]-[new]-[class] 클래스 이름은 LinkedList 이번에도 public static void를 체크하지 말자 LinkedList
LinkedList 추가 구현
모두 없애는 함수 첫번째 head가 null을 가져오게 하면 나머지 링크를 가리키고있지 않으므로 못찾는다는 점을 이용
public void clear()
{
Node current = head ;
current.next = null;
}
public void clear()
{
buffer.clear();
}
public int length()
{
return buffer.length();
}
길이 출력하는
public int length()
{
Node current = head;
int count = 0;
while(current != null)
{
count++;
current = current.next;
}
return count;
}
큐(Queue) 구현
위의 LinkedList 클래스를 바탕으로 구현
public class Queue {
// 보통 버퍼는 들어가는 것과 빼는 것 두가지가 필요함
// 내부공간 만듦
private LinkedList buffer;
Queue()
{
buffer = new LinkedList();
}
public void Enqueue(int data) {
// 버퍼의 뒤에 데이터 추가
// 인큐는 그대로 링크드 리스트
buffer.insert(data);
}
public int Dequeue() {
// 버퍼의 앞에서 데이트를 빼서 리턴
// 앞에서 뺀다
int data = buffer.getData(0);
buffer.deleteAt(0);
return data;
}
public void print()
{
buffer.print();
}
public void clear()
{
buffer.clear();
}
public int length()
{
return buffer.length();
}
}
main 함수에서 불러오기
public class main {
public static void main(String[] args) {
// TODO Auto-generated method stub
LinkedList list = new LinkedList();
}
문제
출력 값을 예상해 보시오
public class main {
public static void main(String[] args) {
// TODO Auto-generated method stub
LinkedList list = new LinkedList();
Queue queue = new Queue();
queue.Enqueue(1);
queue.Enqueue(2);
queue.Enqueue(3);
queue.print();
queue.Dequeue();
queue.print();
}
}
[A] 1
2
3
2
3
다른 방법으로 큐 구현
LinkedList 추가 구현
public void insertHead(int data)
{
Node newBlock = new Node();
newBlock.data = data;
newBlock.next = head;
head = newBlock;
}
public int getLastData()
{
Node current = head;
while(current.next != null)
current = current.next;
return current.data;
}
Queue
public class Queue {
// 보통 버퍼는 들어가는 것과 빼는 것 두가지가 필요함
// 내부공간 만듦
private LinkedList buffer;
Queue()
{
buffer = new LinkedList();
}
public void Enqueue(int data) {
// 버퍼의 뒤에 데이터 추가
// 인큐는 그대로 링크드 리스트
buffer.insertHead(data);
}
public int Dequeue() {
// 버퍼의 앞에서 데이트를 빼서 리턴
// 앞에서 뺀다
int data = buffer.getLastData();
buffer.deleteLast();
return data;
}
public void print()
{
buffer.print();
}
public void clear()
{
buffer.clear();
}
public int length()
{
return buffer.length();
}
}