循環キューは一般的に使用されるデータ構造であり、配列スペースをリサイクルし、キュー操作を効率的に実装できることが特徴です。 Go 言語では、配列と 2 つのポインターを介して循環キューを実装できます。この記事では、Go 言語での循環キューの実装について詳しく説明し、具体的なコード例を示します。
循環キューの実装原理は、主に配列の循環使用を使用し、前後の 2 つのポインタによってキューの先頭と末尾をマークすることです。 。後部ポインタが配列の末尾に到達すると、モジュロ演算を通じて再び配列の先頭を指すことができ、キューのリサイクルを実現します。
循環キュー構造の定義
type CircularQueue struct { capacity int front int rear int data []interface{} }
循環キューの初期化
func NewCircularQueue(capacity int) *CircularQueue { return &CircularQueue{ capacity: capacity, front: 0, rear: 0, data: make([]interface{}, capacity), } }
エントリ操作
func (cq *CircularQueue) Enqueue(val interface{}) bool { if (cq.rear+1)%cq.capacity == cq.front { return false // 队列已满 } cq.data[cq.rear] = val cq.rear = (cq.rear + 1) % cq.capacity return true }
デキュー操作
func (cq *CircularQueue) Dequeue() interface{} { if cq.front == cq.rear { return nil // 队列为空 } val := cq.data[cq.front] cq.front = (cq.front + 1) % cq.capacity return val }
package main import "fmt" type CircularQueue struct { capacity int front int rear int data []interface{} } func NewCircularQueue(capacity int) *CircularQueue { return &CircularQueue{ capacity: capacity, front: 0, rear: 0, data: make([]interface{}, capacity), } } func (cq *CircularQueue) Enqueue(val interface{}) bool { if (cq.rear+1)%cq.capacity == cq.front { return false } cq.data[cq.rear] = val cq.rear = (cq.rear + 1) % cq.capacity return true } func (cq *CircularQueue) Dequeue() interface{} { if cq.front == cq.rear { return nil } val := cq.data[cq.front] cq.front = (cq.front + 1) % cq.capacity return val } func main() { cq := NewCircularQueue(5) cq.Enqueue(1) cq.Enqueue(2) cq.Enqueue(3) fmt.Println(cq.Dequeue()) fmt.Println(cq.Dequeue()) fmt.Println(cq.Dequeue()) }
スルー上記のサンプル コードでは、単純な循環キューを実装し、エンキュー操作とデキュー操作を実装しました。配列とポインターに基づくこの実装では、固定サイズの配列を効果的に利用し、循環キューの基本機能を実装します。
概要: この記事の導入を通じて、読者は Go 言語での循環キューの実装についてより深く理解し、コード例を通じて循環キューについての理解を深めることができます。この記事が読者のお役に立てば幸いです。
以上がGo 言語での循環キューの実装の詳細については、こちらをご覧ください。の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。