Golang은 대기열을 구현합니다.

WBOY
풀어 주다: 2023-05-16 17:01:08
원래의
1584명이 탐색했습니다.

큐는 컴퓨터 프로그램의 다양한 문제를 해결하는 데 자주 사용되는 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿