Riepilogo - Costruttore di liste concatenate
Fa parte della sezione Programmazione orientata agli oggetti del percorso GO di Coddy. Lezione 24 di 107.
Sfida
FacileCostruiamo una lista concatenata da zero! Creerai una struttura dati in cui ogni nodo punta al successivo, formando una catena di valori collegati in memoria.
Organizzerai il codice in due file:
linkedlist.go: Definisci una structNodecon i campiValue(int) eNext(*Node). Crea una structLinkedListche contiene un puntatore al nodoHead. Implementa questi metodi su*LinkedList:Append- aggiunge un nuovo nodo con il valore specificato alla fine della listaPrepend- aggiunge un nuovo nodo con il valore specificato all'inizio della listaPrint- scorre la lista e stampa tutti i valori separati da->, terminando connil
main.go: Leggi i valori dall'input, crea una lista concatenata aggiungendo nodi alla fine e all'inizio, quindi stampa la struttura finale della lista.
Verranno forniti i seguenti input:
- Riga 1: primo valore da aggiungere alla fine
- Riga 2: secondo valore da aggiungere alla fine
- Riga 3: valore da aggiungere all'inizio
Il tuo metodo Print dovrebbe stampare la lista in questo formato:
[value1] -> [value2] -> [value3] -> nilAd esempio, dati 10, 20 e 5, il tuo output dovrebbe essere:
5 -> 10 -> 20 -> nilIl metodo Append deve scorrere la lista fino alla fine (dove Next è nil) prima di aggiungere il nuovo nodo. Il metodo Prepend dovrebbe creare un nuovo nodo, impostare il suo Next sul nodo iniziale corrente, quindi aggiornare il nodo iniziale con il nuovo nodo. Ricorda che una lista vuota ha un nodo iniziale nil, quindi gestisci questo caso nel tuo metodo Append.
Provalo tu
package main
import "fmt"
func main() {
// Leggi i valori di input
var val1, val2, val3 int
fmt.Scanln(&val1)
fmt.Scanln(&val2)
fmt.Scanln(&val3)
// Crea una nuova lista concatenata
list := &LinkedList{}
// TODO: Usa Append per aggiungere val1 e val2 alla lista
// TODO: Usa Prepend per aggiungere val3 all'inizio della lista
// TODO: Stampa la struttura finale della lista
}
Tutte le lezioni di Programmazione orientata agli oggetti
1Fondamenti di OOP in Go
File esterniWorkspace e moduli GoPacchetti e importazioniNomi esportati e non esportatiIntroduzione all’OOP in GoGli struct come classiDefinire metodi sugli structReceiver con puntatore vs receiver con valoreInizializzazione degli structFunzioni costruttriciRiepilogo - Calcolatrice semplice4Interfacce
Introduzione alle interfacceImplementazione implicitaL’interfaccia come contrattoInterfaccia vuota (any)Asserzione di tipoSwitch sul tipoComposizione di interfacceInterfacce Stringer ed ErrorRipasso - Calcolatore di forme7Incapsulamento
Campi esportati e non esportatiIncapsulamento a livello di packageMetodi Getter e SetterNascondimento delle informazioni in GoRiepilogo - Registri degli studenti10Tipi generici (Go 1.18+)
Introduzione ai tipi genericiParametri di tipoVincoli di tipoStruct genericheSoluzione alternativa per i metodi genericiRiepilogo - Collezione generica13Modelli di progettazione Parte 1
Introduzione ai modelli di progettazioneModello SingletonModello FactoryModello Abstract FactoryModello ObserverModello Strategy2Approfondimento su tipi e struct
Tipi di base e compostiDefinizioni di tipi personalizzatiTag delle structStruct anonimeStruct annidateValori zero e predefinitiRipasso - Rubrica5Composizione invece dell'ereditarietà
Perché Go non ha l'ereditarietàFondamenti dell'embedding delle structPromozione dei metodiEmbedding di più structEmbedding e aggregazione a confrontoMascheramento dei metodi embeddedRiepilogo: gerarchia dei dipendenti8Gestione degli errori e OOP
L'interfaccia errorTipi di errore personalizzatiWrapping degli errori (fmt.Errorf)Errori sentinellaerrors.Is() ed errors.As()Panic, Defer e RecoverRiepilogo - Parser di file11Libreria standard e OOP
io.Reader e io.Writersort.InterfaceInterfaccia fmt.Stringerencoding/json con le structInterfaccia http.HandlerRipasso - modelli REST API14Modelli di progettazione – Parte 2
Pattern CommandPattern AdapterPattern DecoratorPattern Template MethodPattern StatePattern CompositeMiddleware come Decorator3Puntatori e memoria
Concetti base dei puntatori in GoPuntatori a structPassaggio per valore vs per riferimentoLa funzione new()Garbage collection in GoRiepilogo - Costruttore di liste concatenate6Polimorfismo in Go
Polimorfismo tramite interfacceDuck typing in GoRegole di soddisfacimento delle interfacceCollezioni polimorficheIniezione delle dipendenzeRiepilogo - Elaboratore di pagamenti9Concorrenza e OOP
Basi delle goroutineCanali e comunicazioneCanali bufferizzati vs non bufferizzatiIstruzione selectsync.Mutex e sync.RWMutexsync.WaitGroupProgettazione di struct thread-safeRiepilogo: worker poolEsercitati da solo: Compilatore Go online