Menu
Coddy logo textTech
Percorso di apprendimento

Algoritmi e strutture dati in Rust

La libreria standard di Rust ha quasi tutte le strutture (Vec, VecDeque, HashMap, BTreeMap, BinaryHeap), e il borrow checker ha le sue opinioni su quelle che scrivi da te: una lista semplicemente concatenata è Option<Box<Node>>, e un albero con collegamenti al genitore richiede Rc, RefCell e Weak. Questo percorso ti fa costruire ogni struttura in Rust, poi le usi per ordinare, ricorrere e visitare grafi, e concludi con problemi da colloquio valutati. Gratis, nel browser, con un certificato nella maggior parte dei corsi.

377 lezioni228 sfide702 domande del quiz

Algoritmi e strutture dati in Rust, passo dopo passo

38 corsi377 lezioni228 sfide702 domande del quiz

Ogni passaggio è un insieme di corsi Coddy già esistenti, e ogni pulsante Inizia li apre in Rust. I tre corsi non ancora insegnati in Rust sono elencati dopo i passaggi.

  1. 1
    Inizia questo passoIniziaPila, coda, albero binario, tabella hash e lista concatenata, ognuno costruito da zero in Rust e poi usato per risolvere problemi. In Rust un nodo che possiede il successivo è un Option<Box<Node>>, quindi è qui che l'ownership inizia a sembrare naturale, e alla fine sai cosa fanno per te Vec, VecDeque e HashMap.Inizia
  2. 2
    Inizia questo passoIniziaLista doppiamente concatenata, heap e code di priorità, trie, grafi e l'albero AVL autobilanciato. In Rust la lista doppiamente concatenata è quella difficile, perché a ogni nodo portano due collegamenti; dopo questo passaggio BinaryHeap è un heap che hai scritto tu, con il massimo in testa per impostazione predefinita, e BTreeMap un albero ordinato che capisci.Inizia
  3. 3
    Inizia questo passoIniziaBubble sort, selection, insertion, merge, quick, heap, counting e radix sort, scritti in Rust e osservati nel visualizzatore. sort è stabile e sort_unstable di solito più veloce; dopo questo passaggio sai dire quanto costa la stabilità e quando rinunciarvi.Inizia
  4. 4
    Inizia questo passoIniziaSfide di ricorsione in Rust. Un tipo ricorsivo ha bisogno di un Box prima che il compilatore gli attribuisca una dimensione, e una funzione ricorsiva su di esso gestisce ogni caso, Some o None, così come si dividono caso base e caso ricorsivo. Rust non garantisce l'ottimizzazione delle chiamate in coda, quindi una ricorsione abbastanza profonda manda in overflow lo stack e interrompe il programma. La programmazione dinamica e la manipolazione dei bit sono elencate dopo i passaggi, perché sono insegnate in Python e in C++.IniziaPagina dedicata
  5. 5
    Inizia questo passoIniziaRicerca in ampiezza e in profondità, Dijkstra, Bellman-Ford, ordinamento topologico, Kruskal e Prim in Rust, sul grafo che hai costruito nel secondo passaggio. La coda di priorità di Dijkstra in Rust è un BinaryHeap di Reverse((distance, node)): l'heap del secondo passaggio, trasformato in un min-heap.Inizia
  6. 6
Cosa ottieni
Tutto ciò che userai per imparare a programmare

Impara facendo

Scrivi codice vero, interroga database, crea siti web e padroneggia i prompt per l'AI. Le nostre lezioni interattive coprono tutte le competenze di cui ha bisogno uno sviluppatore moderno.

playground.js
Editor di codice
1const greeting = "Hello, Coddy!"
2function sayHi(name) {
3    return greeting + " " + name
4}
5
bottombar Collapse icon
Test #1test Case Success icon
Test #2test Case Success icon
Test #3test Case Failure icon
Input
"Alex"
Output
"Hello, Coddy! Alex"

Costruisci la tua serie

Sii costante e guarda crescere i tuoi progressi! Tieni traccia della tua abitudine quotidiana di programmare, proteggi la tua serie con i giorni di congelamento e guadagna ricompense ogni giorno che ti presenti.

12 giorni di serie

Torna domani per mantenere la tua serie!

fire Filled icon
left icon

January 2026

right icon

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

21

22

23

24

25

26

27

28

29

30

product Double Or Nothing icon

Lascia o raddoppia

Giorno 5 di 7

fire Freeze icon

Congela serie

2 left

Programma ovunque

Porta il tuo percorso di programmazione sempre con te! Niente configurazioni, niente download: apri l'app e inizia a programmare. Disponibile su iOS, Android e Web con valutazioni di 4,9 stelle.

Python
7Serie
250Punteggio
5Energia
Variabili
journey Hex Done Base iconjourney Hex Done Shadow iconjourney Hex Done Top iconjourney Lesson Done icon
journey Path Right Done icon
journey Hex Done Base iconjourney Hex Done Shadow iconjourney Hex Done Top iconjourney Lesson Done icon
journey Path Left Done icon
journey Hex Active Base iconjourney Hex Active Shadow iconjourney Hex Active Top iconjourney Lesson Theory Challenge icon
CONTINUA
journey Path Right icon
journey Hex Locked Base iconjourney Hex Locked Shadow iconjourney Hex Locked Top iconjourney Lesson Theory Challenge icon
journey Path Left icon
journey Hex Locked Base iconjourney Hex Locked Shadow iconjourney Hex Locked Top iconjourney Lesson All icon
Percorso
Obiettivi
Classifica
Profilo
4.9
StellaStellaStellaStellaStella
Valutazione

Non sei solo

Competi nelle classifiche globali, invita gli amici per guadagnare ricompense e festeggiate insieme i vostri successi. Programmare è più bello con gli amici!

Lega Sfidante
Lega SfidanteI primi 7 avanzano
leaderboard First icon1
avatar 1 icon
fire Filled icon
Alex7+ Days
2840
leaderboard Second icon2
avatar 2 icon
fire Filled icon
Jordan7+ Days
2650
leaderboard Third icon3
avatar 3 icon
fire Filled icon
Sam7+ Days
2420
4
avatar 4 icon
Casey
2180
5
avatar placeholder icon
fire Filled icon
Morgan7+ Days
1950
leaderboard Arrow Up iconZona promozioneleaderboard Arrow Up icon

Tutti i modi per imparare

Leggi, ascolta, mettiti alla prova, chiedi all'AI o ripassa qualsiasi cosa tu abbia già visto. Ogni lezione si adatta a te.

Introduzione alle variabili
Audio

Una variabile è un contenitore con un nome che memorizza un valore a cui puoi fare riferimento più avanti nel programma.

In Python la crei scrivendo il nome, un segno di uguale e poi il valore che vuoi memorizzare.

Il valore può cambiare nel tempo: riassegnare il nome lo fa semplicemente puntare a un nuovo valore.

1xSarah

Ottieni un certificato

Ottieni un certificato per ogni corso che completi. Aggiungilo al tuo profilo LinkedIn e al curriculum per mostrare ai datori di lavoro le tue competenze di programmazione.

CoddyCertificato di completamento
Si certifica cheMario Rossiha completato con successo
python iconFondamenti di Python
Verificato
Datagen 2026
LinkedInAggiungi a LinkedIn

Perché imparare algoritmi e strutture dati in Rust su Coddy

  • L'ownership dove è più difficile. Liste concatenate e alberi sono il primo posto in cui le regole di Rust mordono: ogni valore ha un solo proprietario, e queste strutture vogliono nodi che si puntano a vicenda. Scriverle è il momento in cui Box, Option::take, Rc<RefCell<T>> e Weak smettono di essere sintassi e diventano decisioni, ed è per questo che una guida molto nota al linguaggio si intitola Learning Rust With Entirely Too Many Linked Lists.
  • Collezioni con costi chiari. Vec<T> è la tua pila, VecDeque<T> un buffer circolare e la tua coda, HashMap una tabella hash protetta contro le collisioni intenzionali, BTreeMap un B-tree ordinato e BinaryHeap<T> un max-heap. Costruisci le strutture una volta e sai quale richiede un problema, e perché Dijkstra avvolge le sue voci in Reverse.
  • Quasi tutto il percorso in Rust. Ogni struttura dati, ordinamento, algoritmo sui grafi, sfida di ricorsione e pacchetto da colloquio è insegnato in Rust. Tre corsi sono insegnati altrove ed elencati dopo i passaggi con un link a ciascuno: la programmazione dinamica e la serie di colloqui in Python, in Python, e la manipolazione dei bit, in C++. La manipolazione dei bit si trasferisce con un solo cambio di scrittura: Rust scrive il NOT come !x, e conta i bit impostati con count_ones().
  • Valutato come in un colloquio. Ogni lezione termina con una sfida in Rust verificata da casi di test, e quando una fallisce o non compila, Bugsy legge il tuo codice e ti indirizza verso la correzione senza darti la risposta. Un certificato gratuito nella maggior parte dei corsi, ognuno verificabile al proprio URL.

Domande frequenti su algoritmi e strutture dati in Rust

Rust va bene per algoritmi e strutture dati?

Per usarli, benissimo: le collezioni standard sono veloci e ben documentate, sort è stabile, e il Rust sicuro esclude puntatori pendenti e data race già in compilazione, senza garbage collector. Per scrivere strutture basate su puntatori, è più difficile che in C o Java, perché l'ownership esclude collegamenti condivisi e mutabili a meno che tu non scelga Rc e RefCell, e una lista doppiamente concatenata o un albero con puntatori al genitore sono fatti proprio di questi. Quella difficoltà è anche la lezione: una volta che sai scriverli in Rust, sai esattamente chi possiede cosa.

Quali collezioni di Rust corrispondono a quali strutture dati?

Vec<T> è un array dinamico e la tua pila, VecDeque<T> è un buffer circolare e la tua coda, HashMap e HashSet sono tabelle hash (SipHash per impostazione predefinita, che resiste alle collisioni intenzionali a scapito di un po' di velocità), BTreeMap e BTreeSet sono B-tree ordinati, BinaryHeap<T> è un max-heap, e LinkedList<T> è una lista doppiamente concatenata che raramente preferirai a un Vec o a un VecDeque. Non esiste un tipo trie o grafo; quelli li costruisci tu.

Perché è così difficile scrivere una lista concatenata in Rust?

Perché ogni valore ha esattamente un proprietario. Una lista semplicemente concatenata rispetta la regola: ogni nodo possiede il successivo tramite Option<Box<Node>>. Una lista doppiamente concatenata o un albero con collegamenti al genitore no, perché a ogni nodo portano due puntatori, quindi ricorri a Rc<RefCell<Node>> con Weak per i collegamenti all'indietro, oppure tieni i nodi in un Vec e li colleghi tramite indice. Learning Rust With Entirely Too Many Linked Lists esiste perché tantissime persone si bloccano proprio qui.

Come ottengo un min-heap in Rust?

BinaryHeap<T> è un max-heap, quindi avvolgi ogni elemento in std::cmp::Reverse: inserisci Reverse(x) e il più piccolo x esce per primo. Per Dijkstra, inserisci Reverse((distance, node)), e la tupla confronta prima la distanza. Una volta che hai scritto un heap da te nel secondo passaggio, invertirne l'ordine è ovvio.

Quali corsi di questo percorso non sono insegnati in Rust?

Tre: la programmazione dinamica e la serie di colloqui in Python, insegnate in Python, e la manipolazione dei bit, insegnata in C++. Sono elencati dopo i passaggi, ognuno con un link che lo apre nel suo linguaggio. Una tabella di memoizzazione in Rust è un Vec o una HashMap, e l'overflow degli interi va in panic in una build di debug, quindi un trucco sui bit che si basa sull'overflow circolare lo esplicita con wrapping_add o wrapping_mul.

Devo conoscere Rust prima di iniziare questo percorso?

Almeno ownership, borrowing, struct, enum e Option; Box e i trait aiutano. Se sono argomenti nuovi, il corso di Rust di Coddy ti porta prima a quel punto, gratis, e questo percorso riprende da dove finisce.

Altri percorsi di apprendimento

Gli stessi corsi, organizzati per un ruolo diverso. I progressi si mantengono: un corso completato in un percorso vale per ogni percorso che lo include.

Tutti i percorsi di apprendimento
Illustrazione dei linguaggi di programmazione di Coddy

Inizia gratis il percorso Algoritmi e strutture dati

Inizia a imparare