Dalam bahasa Go, baris gilir mengikut prinsip masuk dahulu (FIFO) dan dilaksanakan menggunakan pakej senarai dalam perpustakaan standard Ia sering digunakan dalam sistem pemesejan; timbunan mengikut yang terakhir masuk dahulu -keluar (LIFO) dan sering digunakan untuk penjejakan panggilan fungsi dan padanan kurungan Dilaksanakan menggunakan kepingan.
Go language data structure talk: Aplikasi baris gilir dan tindanan
Baris gilir
Barisan ialah struktur data yang mematuhi prinsip first-in-first-out (FIFO). Ini bermakna elemen terawal yang dimasukkan ke dalam baris gilir akan dialih keluar terlebih dahulu. Baris gilir sangat berguna dalam senario berikut:
Pelaksanaan baris gilir dalam bahasa Go
yang paling biasa dalam pelaksanaan Go bahasa Ia menggunakanpakej perpustakaan standard: container/list
import ( "container/list" ) // 定义队列类型 type Queue struct { items *list.List } // 创建队列 func NewQueue() *Queue { return &Queue{ items: list.New(), } } // 进队 func (q *Queue) Enqueue(item interface{}) { q.items.PushBack(item) } // 出队 func (q *Queue) Dequeue() interface{} { if q.IsEmpty() { return nil } front := q.items.Front() q.items.Remove(front) return front.Value } // 判断队列是否为空 func (q *Queue) IsEmpty() bool { return q.items.Len() == 0 }
Kes praktikal: Baris Mesej
Baris gilir mesej ialah senario aplikasi biasa bagi baris gilir. Kita boleh menggunakan baris gilir dalam bahasa Go untuk melaksanakan baris gilir mesej:func main() { // 创建消息队列 queue := NewQueue() // 向队列发送消息 queue.Enqueue("消息 1") queue.Enqueue("消息 2") // 接收消息 for { msg := queue.Dequeue() if msg == nil { break } fmt.Println(msg) } }
Timbunan
Timbunan ialah struktur data yang mematuhi prinsip masuk dahulu keluar (LIFO). Ini bermakna elemen terakhir yang ditambahkan pada timbunan akan dialih keluar terlebih dahulu. Tindanan sangat berguna dalam senario berikut:Pelaksanaan tindanan dalam bahasa Go
Bahasa paling mudah untuk penggunaan timbunan dalam Goreee: Kes pertempuran praktikal: Padanan KurungTimbunan ialah alat yang hebat untuk menyemak padanan kurungan:
// 定义栈类型 type Stack []interface{} // 进栈 func (s *Stack) Push(item interface{}) { *s = append(*s, item) } // 出栈 func (s *Stack) Pop() interface{} { if s.Empty() { return nil } top := (*s)[len(*s)-1] *s = (*s)[:len(*s)-1] return top } // 判断栈是否为空 func (s *Stack) Empty() bool { return len(*s) == 0 }
Atas ialah kandungan terperinci Penyelidikan tentang struktur data bahasa Go: aplikasi baris gilir dan tindanan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!