Entra

View Full Version : [C] Stack e funzione Pop


TheVeryKill
13-03-2015, 15:00
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!

Simonex84
13-03-2015, 15:05
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

TheVeryKill
13-03-2015, 15:09
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.

Simonex84
13-03-2015, 15:11
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?

se però fai due pop al primo hai "MAX" al secondo niente

TheVeryKill
13-03-2015, 15:18
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! :D

Simonex84
13-03-2015, 15:20
Di niente mi raccomando con l'indentazione è molto ma molto importante