Rumah > pembangunan bahagian belakang > Golang > Penyelidikan tentang struktur data bahasa Go: aplikasi baris gilir dan tindanan

Penyelidikan tentang struktur data bahasa Go: aplikasi baris gilir dan tindanan

PHPz
Lepaskan: 2024-04-08 12:57:01
asal
860 orang telah melayarinya

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.

Penyelidikan tentang struktur data bahasa Go: aplikasi baris gilir dan tindanan

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:

  • Sistem penghantaran mesej, seperti baris gilir mesej
  • Penimbal, seperti baris gilir permintaan rangkaian

Pelaksanaan baris gilir dalam bahasa Go

yang paling biasa dalam pelaksanaan Go bahasa Ia menggunakan

pakej 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
}
Salin selepas log masuk

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)
    }
}
Salin selepas log masuk

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:

    Pengesanan panggilan fungsi
  • Padanan kurungan

Pelaksanaan tindanan dalam bahasa Go

Bahasa paling mudah untuk penggunaan timbunan dalam Goreee:

Kes pertempuran praktikal: Padanan Kurung

Timbunan 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
}
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan