[C] realloc vs liste
Moderatore: Staff
Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.
La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.
La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
[C] realloc vs liste
Spesso ho la necessità di avere un array dinamico, che dovrà contenere un numero di elementi sempre variabile.
Ci sono due soluzioni: si puo' creare un array di base e allargarlo attraverso la funzione realloc() prima dell'inserimento di un nuovo elemento, oppure usare le liste. Quale delle due soluzioni è preferibile e perchè ?
Ci sono due soluzioni: si puo' creare un array di base e allargarlo attraverso la funzione realloc() prima dell'inserimento di un nuovo elemento, oppure usare le liste. Quale delle due soluzioni è preferibile e perchè ?
- targzeta
- Iper Master

- Messaggi: 6643
- Iscritto il: gio 3 nov 2005, 14:05
- Nome Cognome: Emanuele Tomasi
- Slackware: 64-current
- Kernel: latest stable
- Desktop: IceWM
- Località: Carpignano Sal. (LE) <-> Pisa
Re: [C] realloc vs liste
Il vantaggio dell'array è quello di accedere ad uno qualsiasi dei suoi elemente a costo zero, mentre la lista, in generale, la devi scorrere. Se ad esempio vuoi modificare l'elemento centrale, con l'array lo fai immediatamente, mentre se hai una lista, prima devi ricercare l'elemento centrale, e poi puoi modificarlo. Per dirla in altre parole, non puoi applicare l'aritmetica dei puntatori ad una lista come invece faresti con un array.
Quindi dipende da cosa vuoi, la struttura dati che si adatta meglio la scopri solo così
.
Per quanto riguarda la realloc(), non ti preoccupare, non è un grosso problema. Generalmente io uso (in pseudocodice):in questo modo, le chiamate alla realloc() sono relativamente poche, se scegli bene X.
Spina
Quindi dipende da cosa vuoi, la struttura dati che si adatta meglio la scopri solo così
Per quanto riguarda la realloc(), non ti preoccupare, non è un grosso problema. Generalmente io uso (in pseudocodice):
Codice: Seleziona tutto
int size=X;
malloc(size);
if ( num_elementi == size )
realloc(size*=2);
inserisci();
Spina
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
- paolo86
- Linux 0.x

- Messaggi: 73
- Iscritto il: lun 14 lug 2008, 19:22
- Nome Cognome: Paolo Cortis
- Slackware: Slackware64 current
- Kernel: 3.4.1-jiraiya
- Desktop: KDE 4.8.2
- Località: Cagliari
- Contatta:
Re: [C] realloc vs liste
Dipende...
Se ti serve che gli elementi siano accessibili in modo casuale (quindi indicizzati),
allora non sbagli se usi un'array dinamico.
Se invece non hai bisogno di avere un accesso casuale le liste possono andare benissimo;
a volte sono anche meglio perché se per esempio vuoi mantenere ordinati gli elementi,
con le liste non hai molti problemi in quanto puoi aggiungere un elemento nella posizione
che preferisci impostando massimo due puntatori, mentre con l'array è un po' più ostico.
Io ti suggerisco le liste.
Se ti serve che gli elementi siano accessibili in modo casuale (quindi indicizzati),
allora non sbagli se usi un'array dinamico.
Se invece non hai bisogno di avere un accesso casuale le liste possono andare benissimo;
a volte sono anche meglio perché se per esempio vuoi mantenere ordinati gli elementi,
con le liste non hai molti problemi in quanto puoi aggiungere un elemento nella posizione
che preferisci impostando massimo due puntatori, mentre con l'array è un po' più ostico.
Io ti suggerisco le liste.
Re: [C] realloc vs liste
Per quanto riguarda la funzione realloc, nel caso in cui non fosse possibile allargare il blocco di memoria nel punto in cui è stato inizializzato cosa accadrebbe ? I dati verrebbero copiati automaticamente altrove, se possibile, o la funzione si limiterebbe a restituire NULL ?
- Blizzard
- Master

- Messaggi: 1509
- Iscritto il: mar 2 gen 2007, 22:53
- Nome Cognome: Giovanni Santostefano
- Slackware: 12.2
- Kernel: 2.6.27.7-smp
- Desktop: Fluxbox
- Contatta:
Re: [C] realloc vs liste
Le liste sono il beneabsinthe ha scritto:http://linux.die.net/man/3/realloc
realloc fino alla morte imho. ho sempre odiato le liste
M
Pensa a quando devi riallocare grandi strutture! e non hai memoria contigua per farlo.
realloc se non sbaglio deve trovare un blocco adatto, copiare il vecchio contenuto e liberare la memoria.
La cosa comincia ad essere pesante.
Non si preoccupa neanche, come i vector<T> del C++ di allocare un po di memoria in più per eventuali ingrandimenti.
Le liste ti consentono elasticità, anche se devi costruire strutture parecchio complesse e con sistemi di indicizzazione e ordinamento particolari magari riesci anche a velocizzare le operazioni di accesso.
Il tutto dipende da quanto ti pesa un accesso O(n) rispetto ad O(1)
Gio
- Blizzard
- Master

- Messaggi: 1509
- Iscritto il: mar 2 gen 2007, 22:53
- Nome Cognome: Giovanni Santostefano
- Slackware: 12.2
- Kernel: 2.6.27.7-smp
- Desktop: Fluxbox
- Contatta:
Re: [C] realloc vs liste
P.S.
sto scrivendo un tutorial su come creare/gestire una lista per contenere elementi ibridi.
Lo scopo ovviamente non è di base avere interi, float e gatti nella stessa lista ma avere una lista *quasi generica*. Se poi impastate le cose è colpa del programmatore
sto scrivendo un tutorial su come creare/gestire una lista per contenere elementi ibridi.
Lo scopo ovviamente non è di base avere interi, float e gatti nella stessa lista ma avere una lista *quasi generica*. Se poi impastate le cose è colpa del programmatore
