Barisan ialah struktur data masuk dahulu keluar (FIFO) yang sering digunakan untuk menyelesaikan pelbagai masalah dalam atur cara komputer. Dalam bahasa Go, anda boleh menggunakan pakej kontena dalam pustaka standard untuk melaksanakan struktur data baris gilir.
Mencipta Baris
Untuk membuat baris gilir, kita perlu menggunakan perpustakaan senarai dalam pakej kontena untuk mencipta senarai dan menambah elemen padanya:
package main import ( "container/list" "fmt" ) func main() { // 创建一个新的列表 q := list.New() // 向列表中添加元素 q.PushBack("one") q.PushBack("two") q.PushBack("three") // 遍历列表并打印元素 for e := q.Front(); e != nil; e = e.Next() { fmt.Println(e.Value) } }
Dalam kod di atas , kami mula-mula mengimport pakej kontena/senarai, dan kemudian menggunakan fungsi list.New() untuk mencipta senarai baharu. Seterusnya, tiga elemen telah ditambahkan pada baris gilir menggunakan kaedah q.PushBack() dan gelung for digunakan untuk melelakan senarai dan mencetak elemen.
Operasi Baris Gilir
Selain menambah elemen, baris gilir juga boleh melakukan operasi lain. Berikut ialah beberapa contoh biasa bagi operasi baris gilir:
package main import ( "container/list" "fmt" ) func main() { // 创建一个新的列表 q := list.New() // 向列表中添加元素 q.PushBack("one") q.PushBack("two") q.PushBack("three") // 遍历列表并打印元素 for e := q.Front(); e != nil; e = e.Next() { fmt.Println(e.Value) } // 弹出最前面的元素 q.Remove(q.Front()) // 在最前面添加一个元素 q.PushFront("zero") // 遍历列表并打印元素 for e := q.Front(); e != nil; e = e.Next() { fmt.Println(e.Value) } }
Dalam contoh di atas, kami telah menambah tiga elemen dan menggunakan gelung for untuk mengulang senarai dan mencetak elemen. Seterusnya, kami mengalih keluar elemen hadapan menggunakan q.Remove(q.Front()) dan menambah elemen baharu ke hadapan menggunakan q.PushFront("zero") . Akhir sekali, kami menggunakan gelung for sekali lagi untuk mengulangi senarai dan mencetak elemen.
Melaksanakan struktur Gilir
Jika anda ingin merangkum baris gilir ke dalam struktur, anda boleh menggunakan kod berikut untuk mencipta struktur Gilir:
package main import ( "container/list" ) // 队列结构体 type Queue struct { items *list.List } // 初始化队列 func NewQueue() *Queue { return &Queue{list.New()} } // 将元素插入队列尾部 func (q *Queue) Enqueue(value interface{}) { q.items.PushBack(value) } // 从队列头部移除元素 func (q *Queue) Dequeue() interface{} { if q.items.Len() == 0 { return nil // 空队列 } front := q.items.Front() q.items.Remove(front) return front.Value } // 返回队列的长度 func (q *Queue) Len() int { return q.items.Len() } // 判断队列是否为空 func (q *Queue) IsEmpty() bool { return q.Len() == 0 }
Dalam di atas Dalam kod tersebut, kami mencipta struktur Baris Gilir dan menentukan empat kaedah: Enqueue, Dequeue, Len dan IsEmpty. Enqueue memasukkan elemen pada penghujung baris gilir, Dequeue mengalih keluar elemen daripada kepala baris gilir, Len mengembalikan panjang baris gilir dan IsEmpty menentukan sama ada baris gilir kosong.
Menggunakan struktur Queue
Berikut ialah contoh kod untuk menggunakan struktur Queue:
package main import ( "fmt" ) func main() { q := NewQueue() q.Enqueue("one") q.Enqueue("two") q.Enqueue("three") fmt.Println(q.Len(), q.IsEmpty()) fmt.Println(q.Dequeue()) fmt.Println(q.Dequeue()) fmt.Println(q.Len(), q.IsEmpty()) q.Enqueue("four") fmt.Println(q.Len(), q.IsEmpty()) fmt.Println(q.Dequeue()) fmt.Println(q.Dequeue()) fmt.Println(q.Len(), q.IsEmpty()) }
Dalam kod di atas, kami mula-mula mencipta objek Queue baharu, Dan gunakan kaedah Enqueue untuk menambah tiga elemen pada baris gilir. Kami kemudian menggunakan kaedah Len dan IsEmpty untuk menyemak panjang baris gilir dan sama ada ia kosong, dan mengalih keluar dua elemen pertama menggunakan kaedah Dequeue masing-masing. Seterusnya, kami menggunakan kaedah Len dan IsEmpty sekali lagi untuk menyemak panjang baris gilir dan sama ada ia kosong, dan menambah elemen baharu "empat" pada baris gilir. Akhir sekali, kami menggunakan kaedah Dequeue sekali lagi untuk mengalih keluar dua elemen pertama dan menggunakan Len dan IsEmpty untuk menyemak sama ada baris gilir kosong.
Kami dapat melihat bahawa dengan bantuan struktur Queue, kami boleh melaksanakan struktur data baris gilir dengan jelas dan ringkas.
Atas ialah kandungan terperinci Golang melaksanakan giliran. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!