Announcement

Collapse
No announcement yet.

creare uno stack

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • creare uno stack

    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


    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 sceltaelementocontrollo;
        
        
    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;
      
        
    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(
    0stack1->topi++)
        {
            
    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;


  • #2
    broke appena ho un sec faccio il debug e ti dico
    | VFX Artist, C++ Programmer, HW Overclocker | Web: xgiovio.com Email: xgiovio@gmail.com Twitter: @xgiovio

    Comment


    • #3
      Originally posted by xgiovio View Post
      broke appena ho un sec faccio il debug e ti dico
      non ti preoccupare ho riscritto quasi tutto il codice ora funziona tutto perfettamente se vuoi lo posto

      Comment


      • #4
        ecco il programma perfettamente funzionante per tutti quelli che lo vogliono vedere
        PHP Code:
        #include<st***.h>

        struct stack{
            
        int vet[10];
            
        int top;
            
        int  pieno,vuoto;


        };

        void inizializza(struct stack*);
        int controlla_pieno(struct stack*);
        int controlla_vuoto(struct stack*);
        void inserisci(struct stack*,int);
        int preleva(struct stack*);
        void stampa(struct stack*);


        int main(){
            
        struct stack stack1;
            
        int scelta,contr_vuoto,numero,contr_pieno;
            
            
        inizializza(&stack1);
            do{
              
                
            
        printf(" ______________________\n");
            
        printf("|1:preleva.............|\n");
            
        printf("|2:inserisci...........|\n");
            
        printf("|3:stampa..............|\n");
            
        printf("|4:reset...............|\n");
            
        printf("|5:esci................|\n");
            
        printf("!----------------------!\n");
                
        scanf("%d",&scelta);
                
        contr_vuoto=controlla_vuoto(&stack1);// ogni volta che ripeto il ciclo vedo se si è svuotato o riempito lo stack
                
        contr_pieno=controlla_pieno(&stack1);
                
                switch(
        scelta){
                        
                    case 
        1:  
                        if(
        contr_vuoto!=0)   //posso prelevare
                        
        {
                            
        numero=preleva(&stack1);
                            
        printf("%d\n",numero);
                        }
                        
                            else 
        printf("errore stack vuoto\n");   //non poddo prelevare
                    
        break;
                        
                        
                    case 
        2:
                                       if(
        contr_pieno!=0)// posso inserire un elemento
                        
        {
                              
        printf("inserisci il valore\n");
                              
        scanf("%d",&numero);
                                 
        inserisci(&stack1,numero);
                        }
                        else
                            
        printf("errore stack pieno\n");   // non posso stack è pieno
                    
        break;
                        
                        
                            
                    case 
        3:
                            
                            if(
        contr_vuoto!=0)// stampo solo se  c'è qualcosa da stampare!
                            
        {
                                
        stampa(&stack1);
                                
                            }
                                else
                                    
        printf("impossibile stampare stack vuoto!\n");
                    break;
                        
                    case 
        4:
                        
        inizializza(&stack1);  // resetto lo stack
                    
        break;
                        
                    case 
        5:
                        
        printf("arrivederci\n");
                    break;
                    default: 
        printf("scelta errata\n");
                        }
                
            }while(
        scelta!=5);
          

            


        }


        void inizializzastruct stack *stack1){
            (
        stack1->top)=0;
            (
        stack1->pieno)=0;
            (
        stack1->vuoto)=0;

        }

        int controlla_vuoto(struct stack *stack1){
        if(
        stack1->top==-1)// altrimenti non controlla l'elemento con 0
            
            
        return(0);
        else return 
        1;


        }

        int preleva(struct stack *stack1){
                  
        int x;
            
            
            
        x=stack1->vet[stack1->top--];    // x assena stack1->vet[top--]si deve decrementare il top perchè ho prelevato un numero
         
            
        if(stack1->top==0)
                
        stack1->vuoto=0;
            
            return 
        x;

        }
        int controlla_pieno(struct stack *stack1){

        if(
        stack1->top==10)
            return 
        0;                         // se il top è 10 lo stack è pieno
        else return 1;                       // si lo so ho fatto al contrario 0 pieno e 1 vuoto me ne sono accorto dopo ma mi scoccio di cambiare la condizione xd

        }



        void inserisci(struct stack *stack1,int x){

            
        stack1->vet[stack1->top]=x;//inserisco
            
        stack1->top++;// faccio spazio per il successivo elemento
            
        if(stack1->top==10)// se il top è 10 non posso più inserire
            
        {stack1->pieno=1;
            }
        }

        void stampa(struct stack *stack1){

            
        int x;
            
        int i;
            
        x=stack1->top--;
            for(
        i=x;x--; ){
                
        printf("   _______ \n");
                
        printf("  |       |\n");
                
        printf("     %d    \n ",stack1->vet[x]);
                
        printf(" |_______|\n");
            }

        Comment


        • #5
          ottimo, appena ho un sec me lo leggo con calma.grazie
          | VFX Artist, C++ Programmer, HW Overclocker | Web: xgiovio.com Email: xgiovio@gmail.com Twitter: @xgiovio

          Comment

          Working...
          X

          Google Profile


          My name is Giovanni Di Grezia, but people call me xgiovio.

          Here is my homepage:.

          I'm a VFX Artist and Software Developer.

          Giovanni Di Grezia