Penso che non devi accettare di non capire queste cose, perché sono davvero fondamentali. Detto questo, non comprenderli non è niente di cui sentirsi male.
Puoi spiegare un elenco collegato a un bambino. Quindi se il tuo insegnante non ti ha spiegato, è colpa loro. Quindi non dovresti perdere tempo a preoccuparti, ma piuttosto cercare di trovare persone che possano spiegartelo. Spesso un compagno di studi è un insegnante molto migliore di un accademico a tempo pieno.
Pensa ai treni
Immagina, hai una serie di vagoni ferroviari, dove ogni carrozza ha una capacità sufficiente, per contenere un pezzo di dati. Ogni carrozza ha una specie di gancio all'estremità, che può essere attaccato al davanti di un'altra vettura.
Questo infatti ti dà un elenco collegato:
- la lista vuota: il treno senza carrelli (e quindi senza dati)
- aggiunta di un elemento: aggiungi un nuovo carrello contenente l'elemento davanti al treno e collegalo al resto del treno
- rimozione di un elemento: trova il carrello contenente l'elemento. Rimuovilo (potresti aver bisogno di una gru qui :)), aggancia il carrello prima con il carrello dopo.
- sostituzione di un elemento: trova il carrello contenente il vecchio elemento. Scambia il vecchio elemento con il nuovo elemento.
- inserendo un elemento subito dopo l'altro: trova il carrello contenente l'elemento dopo il quale desideri inserirlo. Inserisci una nuova carrozza dopo di essa, che è agganciata di conseguenza (non vogliamo che il treno si sfaldi) e inserisca il nuovo elemento in essa.
Al contrario, potresti pensare a un array come a un treno con un determinato numero di carrelli, che non può essere riorganizzato in alcun modo. Tutto quello che puoi fare è cambiare i dati al loro interno. Questo modello spiega anche molti degli array dei problemi:
- Se vuoi inserire un elemento prima di un altro, dovrai spostare tutti i seguenti elementi al prossimo carrello.
- Se vuoi rimuovere un elemento, devi spostare tutti i seguenti elementi di un carrello in primo piano.
- Se hai bisogno di un treno con più carrozze, dovrai costruirne uno nuovo, perché non puoi anteporre una carrozza.
D'altro canto, trovare carrelli in un array è molto più semplice, perché puoi semplicemente numerarli in modo permanente (il loro ordine non cambierà mai).
Per quanto riguarda lo stack: uno "stack" è meno una struttura dati, piuttosto che un'idea. L'idea dello stack è che funziona come una pila di libri. Puoi mettere i libri solo in cima allo stack e puoi sempre prendere il primo libro in pila (almeno se i libri sono sufficientemente pesanti).
Detto questo, una lista concatenata può essere usata come una pila, se pensi ai dati nei carrelli come libri, e il libro nella prima mossa più in vetta della cima della pila.
Quindi spero che questo ti abbia aiutato. Forse no. Forse sei più di un tipo visivo. In tal caso, ti suggerisco di trovare qualcuno, che è bravo a dare spiegazioni visive e spiegarlo a te. Non ci vorrà molto, ma ne varrà assolutamente la pena.
È ok a lottare con questo ora. Ma accettarlo semplicemente non è un'opzione a lungo termine.