


Wie implementiert man eine Warteschlange in Go mithilfe eines kreisförmigen Arrays korrekt?
So implementieren Sie eine Warteschlange in Go
Diese Frage untersucht die Implementierung einer einfachen Warteschlange in Go unter Verwendung eines kreisförmigen Arrays als zugrunde liegende Daten Struktur. Der Ansatz folgt den in „Die Kunst der Computerprogrammierung“ beschriebenen Algorithmen. Beim ursprünglich vorgestellten Code trat jedoch ein Problem mit falscher Ausgabe auf.
Verstehen der Diskrepanz
Das Hauptproblem des Codes liegt im Fehlen eines Mechanismus zur Handhabung Situation, in der die Warteschlange voll ist. Der Ansatz der kreisförmigen Anordnung erfordert eine Möglichkeit, festzustellen, wann die Kapazität erreicht ist. Dem Originalcode fehlte diese Prüfung, was zu einem Versuch führte, Elemente über das Ende des Arrays hinaus zu überschreiben.
Verfeinerung der Implementierung
Um dieses Problem zu beheben, ist eine einfache Änderung erforderlich wird eingeführt. Die Enqueue-Funktion enthält jetzt eine Bedingung, um zu überprüfen, ob der Tail-Index nicht mit dem Head-Index übereinstimmt. Wenn sie gleich sind, ist die Warteschlange voll und die Funktion gibt false zurück. Andernfalls wird das Element zur Warteschlange hinzugefügt, der Endindex erhöht und true zurückgegeben.
Verbesserter Code
Hier ist der aktualisierte Code:
package main import ( "fmt" ) type Queue struct { len int head, tail int q []int } func New(n int) *Queue { return &Queue{n, 0, 0, make([]int, n)} } func (p *Queue) Enqueue(x int) bool { p.q[p.tail] = x ntail := (p.tail + 1) % p.len if ntail != p.head { p.tail = ntail return true } return false } func (p *Queue) Dequeue() (int, bool) { if p.head == p.tail { return 0, false } x := p.q[p.head] p.head = (p.head + 1) % p.len return x, true } func main() { q := New(10) for i := 1; i < 13; i++ { fmt.Println(i, q.Enqueue(i)) } fmt.Println() for i := 1; i < 13; i++ { fmt.Println(q.Dequeue()) } }
Mit dieser Änderung verarbeitet der Code das Ein- und Ausreihen von Elementen korrekt, was zum erwarteten Ergebnis führt Ausgabe:
1 true 2 true 3 true 4 true 5 true 6 true 7 true 8 true 9 true 10 true 11 true 12 true 11 true 12 true 1 true 2 true 3 true 4 true 5 true 6 true 7 true 8 true 9 true 10 true
Das obige ist der detaillierte Inhalt vonWie implementiert man eine Warteschlange in Go mithilfe eines kreisförmigen Arrays korrekt?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

GO Language Pack Import: Was ist der Unterschied zwischen Unterstrich und ohne Unterstrich?

Wie kann ich kurzfristige Informationsübertragung zwischen Seiten im BeEGO-Framework implementieren?

Wie konvertieren Sie die Liste der MySQL -Abfrageergebnisse in eine benutzerdefinierte Struktur -Slice in Go -Sprache?

Wie kann ich benutzerdefinierte Typ -Einschränkungen für Generika in Go definieren?

Wie schreibe ich Scheinobjekte und Stubs zum Testen in Go?

Wie schreibe ich Dateien in Go Language bequem?

Wie kann ich Tracing -Tools verwenden, um den Ausführungsfluss meiner GO -Anwendungen zu verstehen?
