Golang ialah bahasa pengaturcaraan yang semakin popular Kesederhanaan, kecekapan dan kebolehpercayaannya amat digemari oleh pembangun. Golang menyediakan pelbagai struktur data, salah satunya ialah Senarai. Dalam artikel ini, kami akan meneroka cara senarai dilaksanakan di Golang.
Senarai ialah struktur data biasa, dan ia tidak terkecuali di Golang. Senarai ialah struktur data linear yang terdiri daripada satu siri elemen. Setiap elemen mengandungi rujukan kepada elemen seterusnya. Operasi pemasukan dan pemadaman dalam senarai adalah sangat pantas, tetapi operasi carian boleh menjadi perlahan.
Di Golang, kita boleh menggunakan kepingan untuk melaksanakan senarai ringkas. Slice ialah jenis data asli yang boleh mengembangkan kapasitinya secara automatik. Semua operasi yang disokong oleh penghirisan boleh melaksanakan fungsi asas senarai.
Berikut ialah pelaksanaan senarai ringkas:
type List struct { data []interface{} } func (l *List) Push(item interface{}) { l.data = append(l.data, item) } func (l *List) Pop() interface{} { if len(l.data) == 0 { return nil } item := l.data[len(l.data)-1] l.data = l.data[:len(l.data)-1] return item } func (l *List) Get(index int) interface{} { if index < 0 || index >= len(l.data) { return nil } return l.data[index] } func (l *List) Size() int { return len(l.data) }
Dalam pelaksanaan ini, kami menggunakan kepingan untuk menyimpan elemen senarai. Kaedah tolak menambah elemen pada senarai dan kaedah Pop mengalih keluar elemen terakhir daripada senarai dan mengembalikannya. Kaedah Dapatkan digunakan untuk mengakses elemen dalam senarai, dan kaedah Saiz mengembalikan saiz senarai.
Pelaksanaan ini sangat mudah, tetapi tidak sempurna. Sebagai contoh, jika kita perlu menambah atau mengalih keluar elemen daripada senarai, kita perlu menggunakan ungkapan slice append dan slice. Operasi ini boleh menjadi perlahan, terutamanya apabila memasukkan sejumlah besar data.
Untuk menyelesaikan masalah ini, kami boleh menggunakan senarai terpaut untuk melaksanakan senarai. Senarai terpaut ialah struktur data yang terdiri daripada satu siri nod. Setiap nod mengandungi elemen data dan penunjuk ke nod seterusnya.
Berikut ialah senarai ringkas berdasarkan pelaksanaan senarai terpaut:
type ListNode struct { val interface{} next *ListNode } type List struct { head *ListNode size int } func (l *List) Push(item interface{}) { node := &ListNode{ val: item, next: l.head, } l.head = node l.size++ } func (l *List) Pop() interface{} { if l.head == nil { return nil } item := l.head.val l.head = l.head.next l.size-- return item } func (l *List) Get(index int) interface{} { if index < 0 || index >= l.size { return nil } curr := l.head for i := 0; i < index; i++ { curr = curr.next } return curr.val } func (l *List) Size() int { return l.size }
Dalam pelaksanaan ini, kami menggunakan penuding ke nod pertama (kepala) dan integer (saiz) untuk disimpan senarai itu. Kaedah tolak menambah elemen pada senarai dan kaedah Pop mengalih keluar elemen pertama daripada senarai dan mengembalikannya. Kaedah Dapatkan digunakan untuk mengakses elemen dalam senarai, dan kaedah Saiz mengembalikan saiz senarai.
Operasi sisipan dan pemadaman dalam pelaksanaan ini adalah lebih pantas kerana mereka hanya perlu mengubah suai penuding nod. Walau bagaimanapun, apabila mengakses elemen dalam senarai, kita perlu melintasi keseluruhan senarai bermula dari nod kepala (mula). Ini boleh menjadi perlahan, terutamanya apabila senarainya panjang.
Oleh itu, apabila menggunakan senarai terpaut untuk melaksanakan senarai, kita perlu mencari cara untuk menjejaki nod untuk menjadikan elemen mengakses dalam senarai lebih cekap.
Untuk meringkaskan, di Golang, kita boleh menggunakan kepingan atau senarai terpaut untuk melaksanakan senarai. Menghiris adalah mudah untuk dilaksanakan, tetapi mungkin perlahan apabila menambah atau mengalih keluar elemen pelaksanaan senarai terpaut boleh menambah atau mengalih keluar elemen dengan cepat, tetapi mungkin perlahan apabila mengakses elemen dalam senarai. Kita perlu memilih kaedah pelaksanaan yang berbeza untuk memenuhi keperluan kita berdasarkan keadaan tertentu.
Atas ialah kandungan terperinci Bincangkan pelaksanaan senarai Golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!