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!
#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!