Bagaimana untuk melaksanakan baris gilir dalam Go?
Dalam Go, perpustakaan standard tidak menyediakan bekas baris gilir terbina dalam. Artikel ini membentangkan pendekatan alternatif untuk melaksanakan baris gilir dalam Go menggunakan kepingan sebagai struktur data asas.
Membuat Baris Gilir
Untuk membuat baris gilir, anda boleh mengisytiharkan kepingan kosong:
queue := []int{}
Berbaris Elemen
Untuk menambah elemen pada baris gilir, tambahkan elemen itu pada penghujung hirisan:
queue = append(queue, 6)
Elemen Penyahgantian
Untuk mengalih keluar elemen daripada baris gilir, tetapkan elemen pertama hirisan kepada pembolehubah dan kemudian alih keluarnya menggunakan penghirisan:
el := queue[0] queue = queue[1:]
Pertimbangan Prestasi
Walaupun baris gilir berasaskan kepingan mudah dilaksanakan, ia mempunyai beberapa had. Setiap operasi enqueue memerlukan peruntukan semula tatasusunan yang mendasari, yang boleh menjadi tidak cekap untuk baris gilir yang besar.
Untuk mengurangkan isu ini, anda boleh menggunakan pelaksanaan penimbal bulat. Dalam penimbal bulat, elemen ditambah dan dialih keluar daripada kedudukan yang telah ditetapkan dalam penimbal, mengelakkan keperluan untuk peruntukan semula tatasusunan yang mahal.
Kod Contoh
Berikut ialah contoh pelaksanaan penimbal bulat:
package main import ( "fmt" ) // Queue represents a circular buffer queue. type Queue struct { buf []int head int tail int } // NewQueue creates a new queue with the given buffer size. func NewQueue(size int) *Queue { return &Queue{make([]int, size), 0, 0} } // Enqueue adds an element to the queue. func (q *Queue) Enqueue(v int) { q.buf[q.tail] = v q.tail = (q.tail + 1) % len(q.buf) } // Dequeue removes and returns the oldest element from the queue. func (q *Queue) Dequeue() int { v := q.buf[q.head] q.head = (q.head + 1) % len(q.buf) return v }
Pelaksanaan ini memberikan prestasi yang lebih baik untuk operasi enqueue/dequeue, terutamanya dengan baris gilir yang besar.
Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Baris Gilir dengan Cekap dalam Go Menggunakan Slices dan Buffer Pekeliling?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!