C – Strutture con allocazione dinamica della memoria
Si è già trattato di pile e code implementandole in strutture sequenziali di memoria. È opportuno ricordare, come già fatto osservare a suo tempo, che la struttura sequenziale può andare bene solo a determinate condizioni:
- Se gli elementi della struttura sono pochi e può essere effettuata una previsione sulla quantità degli elementi che troveranno posto nella struttura, ed inoltre se in ogni momento si può prevedere una occupazione media della struttura stessa (si ricordi che la struttura occupa una porzione fissa di memoria e non può essere ampliata: è quindi indispensabile un calcolo abbastanza esatto dello spazio necessario per evitare sprechi ed avere sempre a disposizione posto per inserire elementi nella struttura)
- Se il problema da risolvere prevede l’uso di una sola struttura. Quando sono necessarie più strutture i problemi esposti in precedenza diventano più pressanti …l’articolo continua »
C – Puntatori a strutture
Ricorre spesso, specie nelle elaborazioni che riguardano strutture dati dinamiche, così come si vedrà in seguito, la necessità di usare puntatori a strutture: per esempio per passare ad una funzione un riferimento ad una struttura. …l’articolo continua »
C – Allocazione dinamica della memoria
Non sempre è nota a priori la dimensione di una struttura e quindi non è sempre possibile utilizzare una struttura sequenziale che richiede la conoscenza di tale dimensione per poter allocare spazio in memoria. In questi casi viene utilizzata la struttura concatenata: si alloca spazio in memoria quando serve e tutto quello che serve, compatibilmente ovviamente con le risorse disponibili, e si collegano gli elementi fra di loro tramite puntatori, in modo che ogni elemento fornisca informazioni su dove trovare in memoria il successivo della lista. …l’articolo continua »
C – Gestione di una coda
La gestione di una coda presenta dei punti in comuni con la gestione della pila, le funzioni che verranno presentate avranno dei punti in comune con le corrispondenti della pila. …l’articolo continua »
C – Gestione di una pila
La pila può essere implementata in memoria utilizzando sia una struttura sequenziale se, per esempio, si prevede una dimensione massima che potrà avere la struttura, sia una struttura concatenata. Nel programma seguente viene utilizzata una struttura sequenziale per gestire una pila di libri. In questo programma vengono messe in evidenza principalmente le funzioni per la gestione di una pila. …l’articolo continua »
C – Vettori e aritmetica dei puntatori
Si è già fatto notare che, nel linguaggio C, il nome di un vettore è praticamente il puntatore al primo elemento della struttura ossia, per quanto detto precedentemente, l’indirizzo base. Ciò porta alla considerazione che l’elemento generico del vettore è accessibile oltre che, come già osservato, cioè come l’elemento di posizione i della struttura, anche come l’elemento il cui indirizzo può essere calcolato a partire dall’indirizzo base, dalla lunghezza dell’elemento e dalla posizione relativa sebbene, per motivi legati alla comprensibilità delle istruzioni, è più opportuno accedere agli elementi di un vettore utilizzando l’indice. …l’articolo continua »
C – Strutture astratte
Gli array, le prime e fondamentali strutture astratte, sono già state introdotte e si è inoltre parlato della loro implementazione in linguaggio C, così come sono state trattate le tabelle. Altre due strutture di cui si vedranno in seguito le implementazioni e le operazioni più comuni sono le pile e le code. Di grafi e alberi si accennerà solo alle definizioni fondamentali. …l’articolo continua »
C – Strutture dei dati: generalità
Negli esempi che si sono esaminati si sono incontrati, oltre che dati elementari come, per esempio, quelli di tipo int, float o char, si sono esaminati due tipi di aggregati di dati: i vettori, le strutture e le tabelle. …l’articolo continua »
C – Le tabelle: vettori di strutture
La struttura vettore consente di trattare insiemi di dati omogenei solo che, i dati rappresentati in un vettore, possono possedere un solo attributo. Per conservare dati individuati da più attributi occorre ricorrere alle tabelle.
Una tabella è un insieme finito di elementi ciascuno costituito da una chiave (informazione che serve per individuare l’elemento) e da un valore (informazioni associate alla chiave). Si può pensare la tabella come ad un quadro con le seguenti caratteristiche:
- Un numero di riga (chiave) che è associato alla riga e quindi la individua in maniera univoca
- Un numero finito di righe in ognuna della quale è conservato un elemento dell’insieme di dati rappresentato (il valore associato alla chiave)
- Un numero finito di colonne in ognuna delle quali è rappresentato un attributo dell’elemento conservato nella riga.
Per esempio potremmo conservare in una tabella i libri utilizzati in un anno scolastico. In ogni riga della tabella sono conservate le informazioni relative ad un libro. Ogni colonna della tabella conterrà un attributo del libro (per es. nella prima colonna ci sarà il titolo, nella seconda l’autore ecc..). …l’articolo continua »
C – Le strutture
Una struttura è un insieme di variabili di uno o più tipi, raggruppate da un nome in comune. Anche i vettori sono collezioni di variabili come le strutture solo che un vettore può contenere solo variabili dello stesso tipo, mentre le variabili contenute in una struttura non devono essere necessariamente dello stesso tipo.
Le strutture del linguaggio C coincidono con quelli che in Informatica sono comunemente definiti record. Il raggruppamento sotto un nome comune permette di rappresentare, tramite le strutture, entità logiche in cui le variabili comprese nella struttura rappresentano gli attributi di tali entità. …l’articolo continua »
