Rumah > pembangunan bahagian belakang > Golang > Buat struktur senarai terpaut berprestasi tinggi, ditulis dalam Golang

Buat struktur senarai terpaut berprestasi tinggi, ditulis dalam Golang

WBOY
Lepaskan: 2024-01-28 08:01:17
asal
1038 orang telah melayarinya

Buat struktur senarai terpaut berprestasi tinggi, ditulis dalam Golang

Golang ialah bahasa pengaturcaraan berprestasi tinggi dengan keupayaan serentak dan pengurusan memori menjadikannya sangat sesuai untuk menulis struktur data yang cekap. Senarai terpaut ialah struktur data biasa Berikut akan memperkenalkan cara menggunakan Golang untuk menulis struktur senarai terpaut yang cekap dan memberikan contoh kod khusus.

Senarai terpaut ialah struktur data linear yang terdiri daripada nod Setiap nod mengandungi nilai dan penunjuk ke nod seterusnya. Berbanding dengan tatasusunan, kelebihan senarai terpaut ialah memasukkan dan memadam elemen adalah lebih cekap kerana tidak perlu memindahkan elemen lain. Bagaimanapun, kecekapan carian senarai terpaut agak rendah kerana ia perlu diakses satu persatu bermula dari nod kepala.

Pertama, kami mentakrifkan struktur nod senarai terpaut, kodnya adalah seperti berikut:

type Node struct {
    value int
    next *Node
}
Salin selepas log masuk

Dalam struktur senarai terpaut, kami mentakrifkan nilai jenis integer dan penuding ke nod seterusnya. Seterusnya, kami mentakrifkan struktur senarai terpaut, yang mengandungi penunjuk ke nod kepala dan nod ekor.

type LinkedList struct {
    head *Node
    tail *Node
}
Salin selepas log masuk

Kini kami boleh melaksanakan beberapa operasi asas senarai terpaut, seperti sisipan, pemadaman dan carian. Berikut ialah contoh kod untuk operasi sisipan:

func (list *LinkedList) Insert(value int) {
    newNode := &Node{value: value}
    
    if list.head == nil {
        list.head = newNode
        list.tail = newNode
    } else {
        list.tail.next = newNode
        list.tail = newNode
    }
}
Salin selepas log masuk

Dalam operasi sisipan, kami mula-mula menentukan sama ada senarai terpaut kosong Jika ia kosong, kedua-dua nod kepala dan nod ekor menghala ke nod baharu. Jika ia tidak kosong, kami menambah nod baharu selepas nod ekor dan menetapkan nod baharu sebagai nod ekor baharu.

Berikut ialah contoh kod untuk operasi pemadaman:

func (list *LinkedList) Remove(value int) {
    if list.head == nil {
        return
    }
    
    if list.head.value == value {
        list.head = list.head.next
        if list.head == nil {
            list.tail = nil
        }
        return
    }
    
    prev := list.head
    current := list.head.next
    
    for current != nil {
        if current.value == value {
            prev.next = current.next
            if current == list.tail {
                list.tail = prev
            }
            return
        }
        
        prev = current
        current = current.next
    }
}
Salin selepas log masuk

Operasi pemadaman terlebih dahulu menentukan sama ada senarai terpaut kosong dan kembali terus jika ia kosong. Kemudian kita dapati nod yang akan dipadamkan dengan melintasi senarai terpaut, simpan nod pendahulunya sebelum memadamkan nod, dan kemudian arahkan nod pendahulu seterusnya ke nod seterusnya yang akan dipadamkan. Apa yang memerlukan perhatian khusus ialah jika nod yang hendak dipadamkan ialah nod ekor, nod ekor senarai terpaut perlu dikemas kini.

Akhir sekali, mari kita laksanakan operasi carian senarai terpaut:

func (list *LinkedList) Search(value int) bool {
    current := list.head
    
    for current != nil {
        if current.value == value {
            return true
        }
        current = current.next
    }
    
    return false
}
Salin selepas log masuk

Operasi carian adalah sangat mudah, kita hanya perlu merentasi senarai terpaut dan membandingkan sama ada nilai nod adalah sama dengan nilai sasaran.

Sekarang kami telah melaksanakan operasi asas senarai terpaut, kami boleh menggunakan senarai terpaut melalui contoh kod berikut:

func main() {
    list := LinkedList{}
    list.Insert(1)
    list.Insert(2)
    list.Insert(3)
    
    fmt.Println(list.Search(2)) // Output: true
    
    list.Remove(2)
    fmt.Println(list.Search(2)) // Output: false
}
Salin selepas log masuk

Di atas ialah contoh kod menggunakan Golang untuk menulis struktur senarai terpaut yang cekap. Senarai terpaut ialah struktur data yang penting, dan mengetahui cara menulis pelaksanaan senarai terpaut yang cekap sangat membantu untuk menyelesaikan masalah praktikal. Semoga artikel ini dapat membantu anda!

Atas ialah kandungan terperinci Buat struktur senarai terpaut berprestasi tinggi, ditulis dalam Golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
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