pelaksanaan timbunan golang

王林
Lepaskan: 2023-05-16 09:24:07
asal
597 orang telah melayarinya

Golang ialah bahasa pengaturcaraan yang cekap, ringkas dan berkuasa yang mempunyai aplikasi yang luas dalam menulis pelbagai jenis aplikasi. Struktur dan algoritma data terbina dalamnya membolehkan pengaturcara mencipta kod yang cekap dengan mudah, antaranya timbunan adalah salah satu struktur data yang digunakan secara meluas. Dalam artikel ini, kita akan membincangkan cara melaksanakan tindanan menggunakan Golang.

Apakah tindanan?

Timbunan ialah struktur data di mana data hanya boleh ditambah atau dipadamkan dalam tertib masuk dahulu (LIFO). Ini bermakna anda hanya boleh menambah pada bahagian atas tindanan dan mengalih keluar elemen yang paling baru ditambah. Apabila menggunakan timbunan, elemen pertama yang ditambahkan ialah elemen terakhir yang dialih keluar.

Apabila membuat tindanan, ia mempunyai dua operasi utama: tolak dan pop. Operasi tolak menambah elemen ke bahagian atas tindanan, manakala operasi pop mengalih keluar elemen dari bahagian atas tindanan. Apabila tindanan kosong, operasi pop mengembalikan ralat kerana elemen tidak boleh dialih keluar daripadanya.

Bagaimana cara menggunakan Golang untuk melaksanakan tindanan?

Di Golang, tindanan boleh dilaksanakan menggunakan tatasusunan atau kepingan. Tatasusunan ialah jujukan panjang tetap yang memerlukan saiz tertentu apabila ia dibuat, manakala hirisan ialah jujukan bersaiz dinamik. Memandangkan saiz timbunan tidak tetap dan perlu diubah saiz secara dinamik pada masa larian, ia sebaiknya dilaksanakan menggunakan kepingan.

Berikut ialah contoh kod untuk melaksanakan tindanan menggunakan kepingan:

package main

import (
   "fmt"
)

type stack []int

func (s *stack) push(v int) {
   *s = append(*s, v)
}

func (s *stack) pop() (int, error) {
   if s.isEmpty() {
      return -1, fmt.Errorf("stack is empty")
   }
   l := len(*s) - 1
   value := (*s)[l]
   *s = (*s)[:l]
   return value, nil
}

func (s *stack) isEmpty() bool {
   return len(*s) == 0
}

func main() {
   s := stack{}
   s.push(1)
   s.push(2)
   s.push(3)
   
   for !s.isEmpty() {
      value, err := s.pop()
      if err != nil {
         fmt.Println(err)
      } else {
         fmt.Printf("%d ", value)
      }
   }
}
Salin selepas log masuk

Dalam contoh ini, kami mentakrifkan jenis yang dipanggil tindanan, iaitu kepingan jenis integer. Kami juga mentakrifkan tiga kaedah: push, pop dan isEmpty. Kaedah tolak menambah nilai pada bahagian atas tindanan, dan kaedah pop memaparkan nilai dari bahagian atas tindanan dan mengembalikan nilai tersebut. Jika timbunan kosong, ralat dikembalikan. Kaedah isEmpty menyemak sama ada timbunan kosong.

Dalam fungsi utama, kami mencipta tindanan bernama s dan menambah tiga nilai menggunakan kaedah tolak. Kami kemudian menggunakan kaedah pop untuk membaca nilai dalam susunan LIFO. Dalam setiap lelaran, kami memanggil kaedah pop dan mencetak setiap nilai. Jika timbunan kosong, mesej ralat dicetak.

Contoh ini menunjukkan cara menggunakan kepingan dalam Golang untuk melaksanakan tindanan. Walau bagaimanapun, anda juga boleh melaksanakan timbunan menggunakan tatasusunan. Jika anda menggunakan tatasusunan, anda perlu menggunakan penimbal saiz tetap untuk menyimpan elemen dan cuba elakkan menukar saiz apabila menambah pada tindanan penuh.

Ringkasan

Tindanan ialah struktur data yang ringkas tetapi berkuasa yang boleh dilaksanakan dengan mudah di Golang. Buat tindanan menggunakan tatasusunan atau hirisan, ubah saiznya secara dinamik semasa masa jalan dan tambah serta alih keluar elemen menggunakan kaedah tolak dan pop. Adalah penting untuk memberi perhatian kepada saiz tindanan dan, jika boleh, elakkan menukar saiz apabila tindanan penuh. Apabila mempelajari pengaturcaraan Golang, menggunakan timbunan mengikut keperluan sebenar dapat meningkatkan kecekapan pengaturcaraan dan menjadikan kod lebih bersih dan lebih mudah diselenggara.

Atas ialah kandungan terperinci pelaksanaan timbunan golang. 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