• Home
  • About
    • Yerim Oh photo

      Yerim Oh

      Happy and worthwhile day by day :)

    • Learn More
    • Email
    • LinkedIn
    • Instagram
    • Github
    • Youtube
  • Posts
    • All Posts
    • All Tags
  • Projects

[15] Java 큐(queue) 구현

03 Jul 2020

Reading time ~2 minutes

Table of Contents
  • 목차
  • 큐(Queue)
    • LinkedList 구현
      • LinkedList 추가 구현
    • 큐(Queue) 구현
  • main 함수에서 불러오기
    • 문제
  • 다른 방법으로 큐 구현
    • LinkedList 추가 구현
  • Queue

목차

  • 큐(Queue)
    • LinkedList 구현
      • LinkedList 추가 구현
    • 큐(Queue) 구현
  • main 함수에서 불러오기
    • 문제
  • 다른 방법으로 큐 구현
    • LinkedList 추가 구현
  • Queue

큐(Queue)

블록을 어떻게 하면 놓치지 않고 전부 저장할까?
• 블록 생성속도보다 거래 정보가 더 빨리 생성되면?
버퍼를 생성해 처리 대기열을 만듦
생성된 데이터를 처리할 수 있을 때까지 대기시킴
가장 오래된 데이터를 가장 먼저 지운다.

image

초록색 하나하나가 노드
다 링크로 연결되어있음

구현해야 하는 것 image

image

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();
	}
}


BasicJava Share Tweet +1