PDA

Visualizza la versione completa : [C] Rappresentare uno stack usando memoria dinamica


assente1
07-01-2011, 11:01
...

Come si puo’rappresentare uno Stack utilizzando la memoria dinamica?
Osservazione: lo Stacke’ una lista in cui inserisco e rimuovo elementi sempre e solo dalla testa
Esercizio:
se si volesse realizzare un programma con uno stack
•che implementi uno stacktramite memoria dinamica
•considerare lo stack come caso particolare del tipo di dato lista
•sullo stacksia possibile inserire elementi dello stesso tipo
•le operazioni di pushe pop sullo stackinseriscono valori di input dati dell’utente
Variazione:
DA DISCUTERE “come cambia la soluzione precedente se sullo stackfosse possibile inserire elementi di tipi diversi”
..non m'interessa particoalrmente la struttura del programma bensì le variazioni che avvengono quando io vado a inserire tipi diversi all'interno del mio stack..grazie in anticipo

ramy89
07-01-2011, 11:09
Basta che tieni un puntatore alla prima e all' ultima struttura allocata,come detto qua (http://forum.html.it/forum/showthread.php?s=&threadid=1439970&perpage=15&highlight=&pagenumber=1),nel mio post a fondo pagina.

assente1
07-01-2011, 15:12
MA E' ABBASTANZA SCONTATO CHE SI ABBIANO DUE PUNTATORI NEL MOMENTO IN CUI CREI UNO STACK ...SIA CON TIPI UGUALI CHE CON TIPI DIVERSI..io vorrei sapere invece come strutturala in modo tale che i miei tipi siano diversi ovvero come se creassi "dinamicamente" anche i dati da inserire...

assente1
08-01-2011, 17:26
EIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII :cry:

ramy89
08-01-2011, 18:48
:cry:

assente1
09-01-2011, 12:44
? :confused: ..

MItaly
09-01-2011, 13:03
Il metodo più semplice che mi viene in mente è usare il vecchio trucco della struttura con un campo che indichi il tipo trasportato e una union per poter memorizzare vari tipi di payload:


enum PayloadType
{
PT_short,
PT_int,
PT_float,
PT_double,
PT_char
/* ... */
};

/* Struct usata per gli elementi della lista */
struct Item
{
struct BaseItem * Next;
struct BaseItem * Prev;
enum PayloadType PT;
union
{
short s;
int i;
float f;
double d;
char c;
/* ... */
} Payload;
};

Al momento di aggiungere un elemento alla lista sottostante, a seconda del tipo da inserire si imposterà in maniera adeguata il membro PT e si memorizzerà quindi il dato in questione nel membro corretto della union.

Si può fare anche in altre maniere (ad esempio usando strutture diverse che hanno come primo campo la struttura base, un concetto simile all'ereditarietà del C++), ma diventa un po' un casino e in genere non ne vale la pena.

alka
09-01-2011, 23:10
Originariamente inviato da assente1
EIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII :cry:

Il forum non è un luogo in cui gli utenti svolgono i compiti a casa altrui.

Invece di pubblicare queste esortazioni, in futuro proponi una tua soluzione affinché tutti possiamo valutarla e correggerla se necessario, senza demandare al forum la risoluzione dell'intero esercizio.

Per questa e altre norme, si veda il Regolamento (http://forum.html.it/forum/showthread.php?s=&threadid=973887).

Loading