Senarai Terpaut ialah struktur data biasa, yang terdiri daripada satu siri nod Setiap nod mengandungi dua atribut utama: medan data (Data) dan medan penunjuk (Seterusnya). Antaranya, medan data digunakan untuk menyimpan data sebenar, dan medan penunjuk menghala ke nod seterusnya. Dengan cara ini, senarai terpaut menyimpan data dalam cara yang fleksibel yang sesuai untuk banyak senario aplikasi yang berbeza.
Dalam bahasa Go, struktur senarai terpaut juga disokong dengan baik. Pustaka standard terbina dalam Go menyediakan pakej bekas/senarai, yang menyediakan pelaksanaan senarai berganda (Double Linked List) yang boleh dipanggil apabila kami menulis kod dalam bahasa Go. Dalam artikel ini, kami akan meneroka cara melaksanakan operasi senarai terpaut menggunakan pakej bekas/senarai.
Penggunaan asas pakej kontena/senarai
Pertama sekali, kita perlu memahami penggunaan asas pakej kontena/senarai. Pakej ini menyediakan struktur Senarai yang mengandungi dua penunjuk ke kepala dan ekor elemen. Pada masa yang sama, struktur ini melaksanakan antara muka standard senarai berganda, termasuk PushBack(), PushFront(), InsertBefore(), InsertAfter(), Remove() dan kaedah lain.
Berikut ialah beberapa contoh operasi senarai terpaut biasa:
l := list.New()
l.PushBack("Go") l.PushBack("Java")
l.PushFront("Python")
elem := l.Back() l.InsertBefore("C++", elem)
l.InsertAfter("JavaScript", elem)
l.Remove(elem)
Operasi senarai terpaut asas ini boleh digunakan secara langsung dalam program kami. Walau bagaimanapun, membangunkan aplikasi praktikal memerlukan lebih banyak operasi senarai terpaut Berikut akan memperkenalkan kaedah pelaksanaan operasi senarai terpaut seperti sisipan, pemadaman, carian dan traversal.
Kendalian sisipan senarai terpaut
Kendalian sisipan senarai terpaut boleh dibahagikan kepada dua situasi berikut:
Untuk memasukkan elemen di kepala senarai terpaut, anda boleh menggunakan kaedah PushFront(). Contohnya adalah seperti berikut:
l.PushFront(1) l.PushFront(2)
Untuk memasukkan elemen di tengah atau di hujung pautan senarai, anda perlu menggunakan kaedah InsertAfter() atau InsertBefore(), Dan berikan kedudukan elemen yang sepadan. Contohnya adalah seperti berikut:
elem := l.Back() // 获取链表尾部元素 l.InsertBefore(99, elem) // 在尾部元素前插入新元素
Padam operasi senarai terpaut
Operasi pemadaman senarai terpaut boleh dibahagikan kepada dua situasi berikut:
Untuk memadamkan elemen kepala senarai terpaut, anda boleh menggunakan kaedah Remove(). Contohnya adalah seperti berikut:
head := l.Front() l.Remove(head)
Untuk memadamkan elemen dalam senarai terpaut, anda perlu mencari lokasi elemen, dan kemudian gunakan kaedah Alih Keluar () untuk melaksanakan operasi padam. Contohnya adalah seperti berikut:
// 找到需要删除的元素 target := 2 for e := l.Front(); e != nil; e = e.Next() { if e.Value == target { l.Remove(e) break } }
Kendalian carian senarai terpaut
Kendalian carian senarai terpaut selalunya memerlukan merentasi keseluruhan senarai terpaut, jadi kerumitan masa adalah tinggi. Walau bagaimanapun, untuk senarai terpaut berskala kecil, operasi carian adalah sangat pantas.
Untuk mencari elemen dalam senarai terpaut, anda perlu melintasi senarai terpaut sehingga elemen ditemui, atau terpaut senarai dilalui. Contohnya adalah seperti berikut:
// 找到需要查找的元素 target := 2 for e := l.Front(); e != nil; e = e.Next() { if e.Value == target { fmt.Println("Find it!") break } }
Cari elemen maksimum dalam senarai terpaut Anda juga perlu melintasi senarai terpaut dan rekod nilai maksimum semasa traversal Kod Contoh adalah seperti berikut:
max := 0 for e := l.Front(); e != nil; e = e.Next() { if e.Value.(int) > max { max = e.Value.(int) } } fmt.Println("Max value is:", max)
Kendalian traversal senarai terpaut
Operasi traversal senarai terpaut adalah agak biasa dan boleh digunakan untuk output, pengubahsuaian , carian dan operasi lain. Apa yang perlu diperhatikan semasa merentasi ialah kita perlu melintasi setiap elemen mengikut susunan elemen dalam senarai terpaut.
Untuk melintasi senarai terpaut dari awal hingga akhir, anda boleh menggunakan kaedah Front() dan Next(). contoh kod adalah seperti berikut:
for e := l.Front(); e != nil; e = e.Next() { fmt.Println(e.Value) }
Untuk melintasi senarai terpaut dari hujung ke kepala, anda boleh menggunakan kaedah Back() dan Prev() Contoh kod adalah seperti berikut:
for e := l.Back(); e != nil; e = e.Prev() { fmt.Println(e.Value) }
Ringkasan
Artikel ini memperkenalkan secara ringkas kaedah pelaksanaan operasi senarai terpaut dalam bahasa Go. Dengan menggunakan pakej bekas/senarai, kami melaksanakan operasi asas seperti memasukkan, memadam, mencari dan melintasi senarai terpaut. Untuk operasi senarai terpaut dalam aplikasi sebenar, kami perlu merangkum dan mengembangkannya lagi mengikut keperluan khusus untuk memenuhi keperluan perniagaan.
Atas ialah kandungan terperinci Bagaimana untuk melaksanakan operasi senarai terpaut dalam bahasa Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!