Maison > développement back-end > Golang > Golang implémente la file d'attente

Golang implémente la file d'attente

WBOY
Libérer: 2023-05-16 17:01:08
original
1627 Les gens l'ont consulté

La file d'attente est une structure de données premier entré, premier sorti (FIFO) qui est souvent utilisée pour résoudre divers problèmes dans les programmes informatiques. Dans le langage Go, vous pouvez utiliser le package conteneur dans la bibliothèque standard pour implémenter la structure de données de file d'attente.

Création d'une file d'attente

Pour créer une file d'attente, nous devons utiliser la bibliothèque de listes dans le package conteneur pour créer une liste et y ajouter des éléments :

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)
    }
}
Copier après la connexion

Dans le code ci-dessus, nous avons d'abord importé le package conteneur/liste, puis Une nouvelle liste est créée à l’aide de la fonction list.New(). Ensuite, trois éléments ont été ajoutés à la file d'attente à l'aide de la méthode q.PushBack(), et une boucle for a été utilisée pour parcourir la liste et imprimer les éléments.

Opérations de file d'attente

En plus d'ajouter des éléments, les files d'attente peuvent également effectuer d'autres opérations. Voici quelques exemples courants d'opérations de file d'attente :

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)
    }
}
Copier après la connexion

Dans l'exemple ci-dessus, nous avons ajouté trois éléments et utilisé une boucle for pour parcourir la liste et imprimer les éléments. Ensuite, nous supprimons l'élément front en utilisant q.Remove(q.Front()) et ajoutons un nouvel élément au front en utilisant q.PushFront("zero") . Enfin, nous avons à nouveau utilisé la boucle for pour parcourir la liste et imprimer les éléments.

Implémenter une structure de file d'attente

Si vous souhaitez encapsuler la file d'attente dans une structure, vous pouvez utiliser le code suivant pour créer une structure de file d'attente :

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
}
Copier après la connexion

Dans le code ci-dessus, nous créons une structure de file d'attente et quatre méthodes Enqueue, Dequeue , Len et IsEmpty sont définis. Enqueue insère des éléments à la fin de la file d'attente, Dequeue supprime les éléments de la tête de file d'attente, Len renvoie la longueur de la file d'attente et IsEmpty détermine si la file d'attente est vide.

Utilisation de la structure Queue

Ce qui suit est un exemple de code utilisant la structure Queue :

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())
}
Copier après la connexion

Dans le code ci-dessus, nous créons d'abord un nouvel objet Queue q et ajoutons trois éléments à la file d'attente à l'aide de la méthode Enqueue. Nous utilisons ensuite les méthodes Len et IsEmpty pour vérifier la longueur de la file d'attente et si elle est vide, et supprimons respectivement les deux premiers éléments à l'aide de la méthode Dequeue. Ensuite, nous utilisons à nouveau les méthodes Len et IsEmpty pour vérifier la longueur de la file d'attente et si elle est vide, et ajoutons un nouvel élément "quatre" à la file d'attente. Enfin, nous utilisons à nouveau la méthode Dequeue pour supprimer les deux premiers éléments et utilisons Len et IsEmpty pour vérifier si la file d'attente est vide.

Nous pouvons voir qu'avec l'aide de la structure de file d'attente, nous pouvons implémenter la structure de données de file d'attente de manière claire et concise.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal