Maison > développement back-end > Golang > le corps du texte

Tas, pile, dictionnaire, arbre rouge-noir et autres structures de données en langage Go

王林
Libérer: 2023-06-03 15:10:33
original
1275 Les gens l'ont consulté

Avec le développement de l'informatique, la structure des données est devenue un sujet important. Dans le développement de logiciels, les structures de données sont très importantes. Elles peuvent améliorer l’efficacité et la lisibilité du programme et peuvent également aider à résoudre divers problèmes. Dans le langage Go, les structures de données telles que le tas, la pile, le dictionnaire et l'arbre rouge-noir sont également très importantes. Cet article présentera ces structures de données et leur implémentation en langage Go.

  1. Heap

Heap est une structure de données classique utilisée pour résoudre les problèmes de file d'attente prioritaire. Une file d'attente prioritaire fait référence à une file d'attente qui retire les éléments par ordre de priorité. Le tas peut être utilisé pour localiser rapidement l'élément de priorité la plus élevée dans la file d'attente, de sorte que les opérations d'insertion, de suppression et de recherche puissent être mises en œuvre dans une complexité temporelle O(log n).

En langage Go, le tas peut être implémenté à l'aide d'un package conteneur/heap. Ce package fournit une définition d'interface, qui doit implémenter trois méthodes :

// Len renvoie le nombre d'éléments dans le tas
func (h *heap) Len() int {

// ...
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

}

// Less compare deux La taille prioritaire de l'élément, renvoyer true signifie que le premier élément a une priorité plus élevée
func (h *heap) Less(i, j int) bool {

// ...
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

}

// Swap échange les positions de deux éléments
func (h *heap) Swap(i, j int) {

// ...
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

}

Parmi eux, la méthode Less doit implémenter la logique de comparaison des priorités des éléments en fonction des exigences réelles.

Après avoir implémenté ces trois méthodes, vous pouvez convertir une tranche en tas via la méthode heap.Init. Lorsque vous devez ajouter ou supprimer des éléments, vous pouvez utiliser les méthodes heap.Push et heap.Pop dans le package conteneur/heap.

  1. Stack

Stack est une autre structure de données courante, qui peut implémenter le stockage de données premier entré, dernier sorti. La pile est principalement utilisée dans des scénarios tels que les appels de programme et la récursion. Elle peut enregistrer l'ordre des appels de fonction et faciliter les retours de fonctions.

En langage Go, vous pouvez utiliser la structure de liste dans le package conteneur/list pour implémenter la pile. Il convient de noter que les opérations push et pop de la pile doivent être implémentées en utilisant respectivement list.PushBack et list.Back().Value.(type).

  1. Dictionary

Dictionary (Map) est une structure de données couramment utilisée qui peut réaliser le stockage et l'interrogation de paires clé-valeur. Les dictionnaires constituent également une structure de données très importante dans le langage Go et sont souvent utilisés pour enregistrer des configurations, des informations statistiques, etc.

En langage Go, les dictionnaires peuvent être définis directement à l'aide du mot-clé map. Comme suit :

// Définir un dictionnaire
m := make(map[string]int)

// Ajouter des paires clé-valeur
m["apple"] = 2
m["banana"] = 3

/ / Interroger la paire clé-valeur
fmt.Println(m["apple"]) // Sortie 2

// Supprimer la paire clé-valeur
delete(m, "banana")

Cela doit être noté que le type de clé du dictionnaire doit être Il s'agit d'un type de données qui prend en charge l'opérateur ==, tel que string, int, etc. De même, le type valeur du dictionnaire doit également être conforme aux réglementations du langage Go.

  1. Arbre rouge-noir

L'arbre rouge-noir est un arbre de recherche binaire auto-équilibré qui peut implémenter des opérations d'insertion, de suppression et de recherche dans une complexité temporelle O(log n). Les nœuds de l'arbre rouge-noir ont deux couleurs, rouge et noir. Ils ont les caractéristiques suivantes :

  • Le nœud racine est noir
  • Tous les nœuds feuilles sont des nœuds vides noirs (c'est-à-dire que les nœuds feuilles ne stockent pas ; data) ;
  • Tous les nœuds rouges doivent avoir deux nœuds enfants noirs (un arbre rouge-noir garantit que tous les chemins du nœud racine aux nœuds feuilles ont le même nombre de nœuds noirs) ;
  • Tous les chemins de n'importe quel nœud à sa feuille nodes Contient le même nombre de nœuds noirs.

En langage Go, vous pouvez utiliser le package containers/rbtree pour implémenter des arbres rouge-noir. Ce package fournit une définition d'interface. Les méthodes qui doivent être implémentées sont :

// Less compare la taille de deux éléments et renvoie true pour indiquer que le premier élément est plus petit
func (x *MyStruct) Less(than item) bool {

// ...
Copier après la connexion
Copier après la connexion
Copier après la connexion
Copier après la connexion

}

Parmi eux, la méthode Less doit implémenter la logique de comparaison de taille des éléments en fonction des besoins réels. Lors d'une implémentation spécifique, la structure MyStruct doit être intégrée dans la structure Item, comme indiqué ci-dessous :

tapez MyStruct struct {

item.Item
// ...
Copier après la connexion

}

Après avoir implémenté la méthode Less de MyStruct, le nœud racine de l'arborescence peut être obtenu via la méthode Root dans le package conteneur/rbtree, insérez, supprimez et interrogez l'arborescence rouge-noir via les méthodes Insert, Delete et Get. Il convient de noter que la méthode Get fournie par ce package renvoie le nœud correspondant, pas la valeur du nœud.

Résumé

Cet article présente les structures de données couramment utilisées dans le langage Go : tas, pile, dictionnaire, arbre rouge-noir. Ces structures de données sont très courantes dans le développement quotidien, et maîtriser leur utilisation peut améliorer l'efficacité et la lisibilité de notre code.

Dans le développement réel, nous devons choisir la structure de données appropriée en fonction des besoins réels. Par exemple, vous pouvez utiliser un tas lorsque vous devez implémenter une file d'attente prioritaire, vous pouvez utiliser un dictionnaire lorsque vous devez stocker des paires clé-valeur, vous pouvez utiliser un arbre rouge-noir lorsque vous devez implémenter une recherche rapide, etc.

L'utilisation de structures de données appropriées peut rendre notre code plus efficace, concis et facile à maintenir. J'espère que cet article vous sera utile pour votre apprentissage et votre utilisation des structures de données.

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!

Étiquettes associées:
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