Les chaînes de Go sont conçues pour fonctionner comme une file d'attente premier entré, premier sorti (FIFO), mais certaines situations peuvent appeler pour un comportement de pile dernier entré, premier sorti (LIFO). Cet article explore la possibilité de modifier les canaux pour fonctionner comme une pile.
Changer le comportement FIFO
Les canaux Go fonctionnent intrinsèquement selon le principe FIFO, c'est-à-dire le premier élément inséré est le premier récupéré. Il n'existe aucun moyen intégré de modifier ce comportement par défaut. Tenter d'inverser l'ordre en utilisant une plage inversée ou d'autres méthodes ne donnera pas le résultat LIFO souhaité.
Solution alternative : utiliser un tas
Au lieu de modifier les canaux, envisagez utilisant le package "container/heap", une bibliothèque Go standard contenant une structure de données de tas. Un tas est une structure de données arborescente qui maintient l'ordre LIFO, imitant efficacement une pile.
Pour utiliser le package heap, instanciez un nouveau type de tas :
<code class="go">import "container/heap" type myHeap []int func (h myHeap) Len() int { return len(h) } func (h myHeap) Less(i, j int) bool { return h[i] > h[j] } // Reverse order for LIFO func (h *myHeap) Swap(i, j int) { (*h)[i], (*h)[j] = (*h)[j], (*h)[i] } func (h *myHeap) Push(x interface{}) { *h = append(*h, x) } func (h *myHeap) Pop() interface{} { old := *h; n := len(old); x := old[n-1]; *h = old[0 : n-1]; return x }</code>
Ici, nous avons étendu le type de tas et fourni des implémentations personnalisées pour des méthodes telles que « Less », qui définit l'ordre LIFO, et « Push » et « Pop », les opérations fondamentales d'une pile.
En s'appuyant sur les données du tas structure, vous pouvez obtenir un comportement LIFO et effectuer des opérations de style DFS sans modifier la fonctionnalité du canal natif de Go.
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!