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

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

PHPz
PHPzasal
2024-04-08 12:57:01803semak imbas

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
}

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:

    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
}

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!

Kenyataan:
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