questo è il mio codice per la creazione di uno stack( si parla di strtture argomento ancora non trattato all'uni) vi posto il codice e vi avviso che NON FUNZIONA quindi chiunque voglia vederlo e "aggiustarlo"
è gradito
alcuni dettagli il top indica l'ultimo elemento inserito non la prima locazione dove inserire
è gradito
alcuni dettagli il top indica l'ultimo elemento inserito non la prima locazione dove inserire
PHP Code:
#include <st***.h>
struct stack
{
int vet[10];
int top;
};
void inizializza(struct stack*);
int pop(struct stack*);
void push(struct stack*, int);
void stampa(struct stack*);
int contr(struct stack*);
int main()
{
struct stack *stack1=NULL;// Per annullare eventuali worring
int scelta, elemento, controllo;
inizializza(stack1); //inizializza il top a 0;
do
{
printf("1:inserisci elemento\n");
printf("2:preleva elemento\n");
printf("3:stampa elemento\n");
printf("4: esci\n");
scanf("%d",&scelta);
switch(scelta)
{
case 1:
controllo = contr(stack1);
if(controllo) // se il top è minore di 10 posso inserire!
{
printf("Inserisci l'elemento: ");
scanf("%d", &elemento);
push(stack1,elemento);
}
else
printf("error\n"); //top >=10 non posso inserire :-(
break;
case 2:
if(!controllo) //se top è maggiore di 0 posso prelevare !
{
elemento = pop(stack1);
printf("%d",elemento);
}
else // è impossibile prelevare con top =0 !
printf("error\n");
break;
case 3:
if(controllo) //qui mi basta sapere che ho 1 elemento nel mio stack se è così posso stamparlo
stampa(stack1);
else
printf("stack vuoto\n");
break;
case 4:
printf("arrivederci\n");
break;
default:
printf("error");
}
} while (scelta != 4);
return 0;
}
void inizializza(struct stack *stack1)
{
stack1->top=0; // Metto nella parte della struttura top puntata dalla variabile stack 0 questo per far partire lo stack da 1 situazione pulita
}
int pop(struct stack *stack1)
{
int x;
x = stack1->vet[stack1->top]; //inserisci in x il valore ottenuto da vet[top] sintatticamente va
scritto così
stack1->top--; //ho prelevato decremento il top!
return x;
}
void push(struct stack *stack1,int x)//devo inserire un valore nuovo
{
stack1->top++;//faccio spazio aumentando di 1 il top
stack1->vet[stack1->top] = x;// mi copio il valore nella locazione
}
void stampa(struct stack *stack1)
{
int i;
for(i = 0; i < stack1->top; i++)
{
printf("%d", stack1->vet[stack1->top]);//stampa alemento indicato dal top
}
}
int contr(struct stack *stack1)
{
if(stack1->top >=9)// occorre studiare come si comporta quando viene chiamato nei casi limiti con
top ==0 e con top =-=9
return 0;
else
return 1;
}
Comment