|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Nov 2010
Messaggi: 42
|
[C] Stack e funzione Pop
Salve a tutti, sto studiando il linguaggio C e prendendo spunto da i programmi di un professore mi sto esercitando sullo Stack e le funzioni di Push e Pop. Il file Cpp che ho sottomano è questo:
#define MAX 4 int main(){ int stack[MAX+1]; int i,n,stato; stack[0]=MAX; for (i=1;i<=stack[0];i++){ printf("Inserisci il %d elemento dello stack (max 4 elementi):\n",i); scanf("%d",&stack); } printf("\nLo stack e\':\n"); for(i=1;i<=stack[0];i++){ printf("%d ",stack); } printf("\n"); stato=1; while(stato==1||stato==2){ printf("Cosa vuoi fare?\n POP(1) - PUSH(2) - STAMPA(3)\n"); scanf("%d",&stato); switch(stato){ case 1: if(stack[0]==0){ printf("\nNon ci sono elementi nello stack\n"); } else{ stack[0]--; printf("Il top era %d\n",stack[stack[0]+1]); } break; case 2: if(stack[0]==MAX){ printf("\nLo stack e\' pieno\n"); } else{ printf("Che valore vuoi mettere al top?\n"); scanf("%d",&n); stack[stack[0]+1]=n; stack[0]++; } break; } } printf("\nLo stack e\':\n"); for(i=1;i<=stack[0];i++){ printf("%d ",stack); } printf("\n"); system("PAUSE"); return 0; } Ovviamente mancano le librerie ma non è questo il punto. Come potete vedere in grassetto ho indicato una piccola stringa, la mia domanda è: ma cosa vorrebbe indicare? Cioè mi spiego meglio: come da struttura dovrebbe dire "Se lo stack è vuoto dì all'utente che non si può togliere più nulla" ma perché stack[0]==0 dovrebbe indicare stack vuoto? Lo stack così definito non è altro che un vettore di 5 elementi (0 1 2 3 4) ove il valore dell'elemento 0 è pari a MAX (costante predefinita pari a 4), qualcuno mi può spiegare perchè il confronto positivo tra stack[0] e 0 sta ad indicare che il contenitore è vuoto? Ringrazio tutti in anticipo! |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Jun 2003
Messaggi: 15829
|
probabilmente l'assunzione di chi ha scritto il codice è che 0 indica "nessun elemento" e siccome lo stack è un "oggetto" dove gli elementi vengono impilati, se il primo posto utile (stack[0]) è vuoto (cioè uguale a 0) la pila è vuota e quindi non si può fare nessun push
PS, se stai iniziando a studiare un linguagigo di programmazione (vale per tutti i linguaggi) devi sempre scrivere il codice con un'indentazione corretta, così come l'hai scritto te è illeggibile e un casino da debuggare in caso di errori Ultima modifica di Simonex84 : 13-03-2015 alle 16:09. |
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Nov 2010
Messaggi: 42
|
Sì ma come puoi vedere ad inizio compilazione ha dichiarato che quella posizione è occupata da un elemento pari a MAX che è uguale a 4, come può mai variare una cosa fissata quindi?
PS: io uso il costrutto funzionale, cioè con i void e poi richiamo tutto nel main, questa è fatta così solo per dare un idea di come si esercita in situazioni del genere. |
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Jun 2003
Messaggi: 15829
|
|
|
|
|
|
|
#5 |
|
Member
Iscritto dal: Nov 2010
Messaggi: 42
|
Cavolo hai ragione ora ci arrivo! E' ovvio che non è uguale a 0 appena inizio ma dopo che ho fatto 4 Pop si svuota!! XD Io ragionavo in termini diciamo immediati senza pensare che quella istruzione era vera solo dopo che avevo fatto 4 Pop ed ero passato da Max a 0 xD Grazie mille!
|
|
|
|
|
|
#6 |
|
Senior Member
Iscritto dal: Jun 2003
Messaggi: 15829
|
Di niente mi raccomando con l'indentazione è molto ma molto importante
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 20:32.




















