Özet - Linked List Oluşturucu
Coddy'nin GO Journey'sinin Nesne Yönelimli Programlama bölümünün bir parçası. Ders 24 / 107.
Görev
KolaySıfırdan bağlı bir liste oluşturalım! Her düğümün bir sonrakine işaret ettiği ve bellekte birbirine bağlı değerlerden oluşan bir zincir meydana getiren bir veri yapısı oluşturacaksın.
Kodunu iki dosyaya ayıracaksın:
linkedlist.go:Node(int) veValue(*Node) alanlarına sahip birNextstruct'ı tanımla.LinkedListdüğümüne bir işaretçi tutan birHeadstruct'ı oluştur. Bu metotları*LinkedListüzerinde uygula:Append- verilen değere sahip yeni bir düğümü listenin sonuna eklerPrepend- verilen değere sahip yeni bir düğümü listenin başına eklerPrint- listede gezinir ve tüm değerleri->ile ayırarak yazdırır; çıktıyınilile bitirir
main.go: Girdiden değerleri oku, düğümleri sona ve başa ekleyerek bir bağlı liste oluştur, ardından son liste yapısını yazdır.
Aşağıdaki girdiler sağlanacaktır:
- 1. satır: Eklenecek ilk değer
- 2. satır: Eklenecek ikinci değer
- 3. satır: Başa eklenecek değer
Print metodun listeyi şu formatta çıktılamalıdır:
[value1] -> [value2] -> [value3] -> nilÖrneğin 10, 20 ve 5 verildiğinde çıktın şu şekilde olmalıdır:
5 -> 10 -> 20 -> nilAppend metodu, yeni düğümü eklemeden önce listenin sonuna (Next'in nil olduğu yere) kadar ilerlemelidir. Prepend metodu yeni bir düğüm oluşturmalı, düğümün Next alanını mevcut başa işaret edecek şekilde ayarlamalı, ardından başı yeni düğüm olarak güncellemelidir. Boş bir listenin nil başa sahip olduğunu unutma; bu nedenle Append metodunda bu durumu ele al.
Kendin dene
package main
import "fmt"
func main() {
// Giriş değerlerini oku
var val1, val2, val3 int
fmt.Scanln(&val1)
fmt.Scanln(&val2)
fmt.Scanln(&val3)
// Yeni bir bağlı liste oluştur
list := &LinkedList{}
// TODO: val1 ve val2'yi listeye eklemek için Append kullanın
// TODO: val3'ü listenin başına eklemek için Prepend kullanın
// TODO: Nihai liste yapısını yazdırın
}
Nesne Yönelimli Programlama bölümündeki tüm dersler
1Go OOP Temelleri
Harici DosyalarGo Çalışma Alanı ve ModüllerPaketler ve İçe AktarmalarDışa Aktarılan ve Aktarılmayan İsimlerGo'da OOP'ye GirişSınıf Olarak Struct'larStruct'larda Metot TanımlamaPointer ve Değer AlıcılarStruct BaşlatmaYapıcı FonksiyonlarÖzet - Basit Hesap Makinesi4Arayüzler
Arayüzlere GirişÖrtük UygulamaSözleşme Olarak ArayüzBoş Arayüz (any)Tür OnaylamaTür SeçimiArayüz BileşimiStringer ve Error ArayüzleriÖzet - Şekil Hesaplayıcı7Kapsülleme
Dışa Aktarılan ve Aktarılmayan AlanlarPaket Seviyesinde KapsüllemeGetter ve Setter MetotlarıGo'da Bilgi GizlemeÖzet - Öğrenci Kayıtları10Generics (Go 1.18+)
Generics'e GirişTür ParametreleriTür KısıtlamalarıGeneric Struct'larGeneric Metotlar İçin Geçici ÇözümÖzet - Generic Koleksiyon13Tasarım Kalıpları Bölüm 1
Tasarım Kalıplarına GirişSingleton KalıbıFactory KalıbıAbstract Factory KalıbıObserver KalıbıStrategy Kalıbı2Türler ve Struct'lar: Derinlemesine İnceleme
Temel ve Bileşik TürlerÖzel Tür TanımlamalarıStruct EtiketleriAnonim Struct'larİç İçe Geçmiş Struct'larSıfır Değerler ve VarsayılanlarÖzet - Rehber5Kalıtım Yerine Kompozisyon
Go'da Neden Kalıtım YokStruct Gömme TemelleriMetot YükseltmeBirden Fazla Struct GömmeGömme vs AgregasyonGömülü Metotları GölgelemeÖzet - Çalışan Hiyerarşisi8Hata Yönetimi ve OOP
error ArayüzüÖzel Hata TürleriHata Sarmalama (fmt.Errorf)Sentinel Hatalarerrors.Is() ve errors.As()Panic, Defer ve RecoverÖzet - Dosya Ayrıştırıcı3İşaretçiler ve Bellek
Go'da İşaretçi TemelleriStruct İşaretçileriDeğer ile Geçme ve Referans ile Geçmenew() FonksiyonuGo'da Garbage CollectionÖzet - Linked List Oluşturucu6Go'da Polimorfizm
Interface'ler ile PolimorfizmGo'da Duck TypingInterface Karşılama KurallarıPolimorfik KoleksiyonlarDependency InjectionÖzet - Payment Processor9Eşzamanlılık ve OOP
Goroutine TemelleriKanallar ve İletişimTamponlu ve Tamponsuz KanallarSelect İfadesisync.Mutex ve sync.RWMutexsync.WaitGroupThread-Safe Struct TasarımıÖzet - Worker PoolKendi başına pratik yap: Online Go derleyicisi