yoongrammer

[자료구조] 큐(Queue) 구현하기 in Go 본문

자료구조 (Data structure)

[자료구조] 큐(Queue) 구현하기 in Go

yoongrammer 2021. 1. 25. 11:20
728x90

목차

    큐(Queue) 구현하기 in Go


    큐는 선입 선출 (FIFO) 원리를 따라 정렬된 데이터 구조입니다.

     

    golang에서 Slice를 사용하면 쉽게 큐를 구현할 수 있습니다.

    • built-in 함수인 append를 사용하여 enqueue를 구현합니다.
    • 배열의 첫 번째 요소를 잘라내는 방식으로 dequeue를 구현합니다.

    구현


    package main
    
    import "fmt"
    
    type Queue []interface{}
    
    //IsEmpty - 큐가 비어있는지 확인하는 함수.
    func (q *Queue) IsEmpty() bool {
    	return len(*q) == 0
    }
    
    //Enqueue - 큐에 값을 추가하는 함수.
    func (q *Queue) Enqueue (data interface{}) {
    	*q = append(*q, data)  // 큐 끝에 값을 추가함.
    	fmt.Printf("Enqueue: %v\n", data)
    }
    
    //Dequeue - 큐에 첫번째 요소를 반환하고 제거하는 함수.
    func (q *Queue) Dequeue () interface{} {
    	if q.IsEmpty() {
    		fmt.Println("queue is empty")
    		return nil
    	}
    	data := (*q)[0] // 큐에 첫번째 값을 가져옴.
    	*q = (*q)[1:]   // 큐에 첫번째 데이터를 제거함.
    	fmt.Printf("Dequeue: %v\n", data)
    	return data
    }
    
    func main (){
    	q := Queue{}
    	q.Enqueue(1)
    	q.Enqueue(2)
    	q.Enqueue(3)
    	fmt.Printf("%v\n",q)
    
    	q.Dequeue()
    	fmt.Printf("%v\n",q)
    }

    Output:

    Enqueue: 1
    Enqueue: 2
    Enqueue: 3
    [1 2 3]
    Dequeue: 1
    [2 3]

    소스는 아래 깃허브에서 받을 수 있습니다.

    github.com/dev-yyh/Go/tree/main/DS/queue

    설명


    • 모든 유형을 저장할 수 있게 빈 인터페이스(interface{}) 유형으로 큐를 초기화합니다.
    • enqueue 함수는 append 함수를 사용하여 배열 마지막 부분에 값을 추가해 줍니다.
    • dequeue 함수는 큐가 비어있는지 확인하고 비어있지 않다면 첫번째 위치에 있는 값을 가져온 뒤 삭제합니다.

     

    728x90
    Comments