큐는 컴퓨터 프로그램의 다양한 문제를 해결하는 데 자주 사용되는 FIFO(선입선출) 데이터 구조입니다. Go 언어에서는 표준 라이브러리의 컨테이너 패키지를 사용하여 대기열 데이터 구조를 구현할 수 있습니다.
큐 생성
큐를 생성하려면 컨테이너 패키지의 목록 라이브러리를 사용하여 목록을 생성하고 요소를 추가해야 합니다.
package main import ( "container/list" "fmt" ) func main() { // 创建一个新的列表 q := list.New() // 向列表中添加元素 q.PushBack("one") q.PushBack("two") q.PushBack("three") // 遍历列表并打印元素 for e := q.Front(); e != nil; e = e.Next() { fmt.Println(e.Value) } }
위 코드에서는 먼저 컨테이너/목록 패키지를 가져왔습니다. 그런 다음 list.New() 함수를 사용하여 새 목록을 만듭니다. 다음으로 q.PushBack() 메서드를 사용하여 세 개의 요소를 대기열에 추가하고 for 루프를 사용하여 목록을 반복하고 요소를 인쇄했습니다.
큐 작업
큐는 요소 추가 외에도 다른 작업을 수행할 수도 있습니다. 다음은 대기열 작업의 몇 가지 일반적인 예입니다.
package main import ( "container/list" "fmt" ) func main() { // 创建一个新的列表 q := list.New() // 向列表中添加元素 q.PushBack("one") q.PushBack("two") q.PushBack("three") // 遍历列表并打印元素 for e := q.Front(); e != nil; e = e.Next() { fmt.Println(e.Value) } // 弹出最前面的元素 q.Remove(q.Front()) // 在最前面添加一个元素 q.PushFront("zero") // 遍历列表并打印元素 for e := q.Front(); e != nil; e = e.Next() { fmt.Println(e.Value) } }
위 예에서는 세 개의 요소를 추가하고 for 루프를 사용하여 목록을 반복하고 요소를 인쇄했습니다. 다음으로 q.Remove(q.Front())를 사용하여 앞쪽 요소를 제거하고 q.PushFront("zero")를 사용하여 앞쪽에 새 요소를 추가합니다. 마지막으로 for 루프를 다시 사용하여 목록을 반복하고 요소를 인쇄했습니다.
큐 구조 구현
큐를 구조로 캡슐화하려면 다음 코드를 사용하여 큐 구조를 생성할 수 있습니다.
package main import ( "container/list" ) // 队列结构体 type Queue struct { items *list.List } // 初始化队列 func NewQueue() *Queue { return &Queue{list.New()} } // 将元素插入队列尾部 func (q *Queue) Enqueue(value interface{}) { q.items.PushBack(value) } // 从队列头部移除元素 func (q *Queue) Dequeue() interface{} { if q.items.Len() == 0 { return nil // 空队列 } front := q.items.Front() q.items.Remove(front) return front.Value } // 返回队列的长度 func (q *Queue) Len() int { return q.items.Len() } // 判断队列是否为空 func (q *Queue) IsEmpty() bool { return q.Len() == 0 }
위 코드에서는 큐 구조와 Enqueue, Dequeue 네 가지 메소드를 생성합니다. , Len 및 IsEmpty가 정의됩니다. Enqueue는 대기열 끝에 요소를 삽입하고, Dequeue는 대기열의 헤드에서 요소를 제거하고, Len은 대기열의 길이를 반환하고, IsEmpty는 대기열이 비어 있는지 확인합니다.
큐 구조 사용
다음은 큐 구조를 사용하는 샘플 코드입니다.
package main import ( "fmt" ) func main() { q := NewQueue() q.Enqueue("one") q.Enqueue("two") q.Enqueue("three") fmt.Println(q.Len(), q.IsEmpty()) fmt.Println(q.Dequeue()) fmt.Println(q.Dequeue()) fmt.Println(q.Len(), q.IsEmpty()) q.Enqueue("four") fmt.Println(q.Len(), q.IsEmpty()) fmt.Println(q.Dequeue()) fmt.Println(q.Dequeue()) fmt.Println(q.Len(), q.IsEmpty()) }
위 코드에서는 먼저 새 큐 객체 q를 생성하고 Enqueue 메서드를 사용하여 큐에 요소 3개를 추가합니다. 그런 다음 Len 및 IsEmpty 메서드를 사용하여 대기열 길이와 비어 있는지 확인하고 각각 Dequeue 메서드를 사용하여 처음 두 요소를 제거합니다. 다음으로 Len 및 IsEmpty 메서드를 다시 사용하여 대기열의 길이와 비어 있는지 여부를 확인하고 대기열에 새 요소 "4"를 추가합니다. 마지막으로 Dequeue 메서드를 다시 사용하여 처음 두 요소를 제거하고 Len 및 IsEmpty를 사용하여 대기열이 비어 있는지 확인합니다.
큐 구조의 도움으로 큐 데이터 구조를 명확하고 간결하게 구현할 수 있음을 알 수 있습니다.
위 내용은 Golang은 대기열을 구현합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!