Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2003
    Messaggi
    726

    [C] Inserimento in CODA

    Oggi mi sono messo a studiare le code.
    Ho scritto un po' di funzioni "secondarie" e adesso mi stavo cimentando a scrivere la funzione enqueue che dovrebbe inserire in coda un elemento, ma ho problemi a capire come comportarmi quando devo inserire un elemento nel caso la coda non sia vuota.

    Vi posto il codice:
    codice:
    void enqueue(coda *c, int el)
    {
     nodo *n = (nodo *) malloc(sizeof(nodo)); // alloco spazio per il nuovo elemento
     n->d = el; // inserisco il valore passato come input al nuovo elemento
    
      if (!coda_vuota(*c)) // se la pila non ha elementi entra nell'if...
      {
       c->testa = n;
       c->coda = c->testa;
      }
      else //...altrimenti...e qua ho problemi
       c->coda->next = n; 
    /*La precedente riga è sicuramente sbagliata, ma non riesco a trovare una soluzione alternativa. Se stampo il contenuto della coda per vedere se tutto è ok la funzione per la stampa va in loop e stampa numeri in continuazione*/
                                   
                                    
    
    
      c->num_elem++;
    }
    Cosa sbaglio??


    Grazie

  2. #2
    Utente di HTML.it
    Registrato dal
    Nov 2003
    Messaggi
    726
    Ah dimenticavo:

    la coda è cosi strutturata:
    codice:
    struct nodo_coda
    {
     int d;
     struct nodo_coda *next;
    };
    
    struct coda
    {
     struct nodo_coda *testa;
     struct nodo_coda *coda;
     int num_elem;
    };
    
    typedef struct nodo_coda nodo;
    typedef struct coda coda;

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2003
    Messaggi
    726
    up

  4. #4
    Utente di HTML.it
    Registrato dal
    Nov 2003
    Messaggi
    726
    Nessuno nessuno?

  5. #5
    Utente di HTML.it L'avatar di frznn
    Registrato dal
    Apr 2008
    Messaggi
    108
    perchè è sbagliata?
    a me l'istruzione sembra giusta, fai puntare il next dell'ultimo nodo al nuovo nodo.
    L'unica cosa che manca è aggiornare il puntatore coda.
    Cioè
    c->coda = c->coda->next;

    o no?
    *** Rock n' Roll ain't noise pollution ***

  6. #6
    sì, c'è quanche errore, ho provato a correggerli, ciao
    codice:
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    
    struct nodo_coda
    {
    	int d;
    	struct nodo_coda *next;
    };
    
    struct coda
    {
    	struct nodo_coda *testa;
    	struct nodo_coda *coda;
    	int num_elem;
    };
    
    typedef struct nodo_coda nodo;
    typedef struct coda coda;
    
    void enqueue(coda *c, int el)
    {
    	nodo *n = (nodo *) malloc(sizeof(nodo)); // alloco spazio per il nuovo elemento
    	n->d = el; // inserisco il valore passato come input al nuovo elemento
    	n->next = NULL;
    
    	if (!c->testa) // se la pila non ha elementi entra nell'if...
    	{
    		c->testa = n;
    		c->coda = c->testa;
    	}
    	else //...altrimenti...
    	{
    		c->coda->next = n;
    		c->coda = n;
    	}
                                  
    	c->num_elem++;
    
    }
    
    int main (int argc, const char * argv[]) {
    
    
    	coda  mia_coda ;
    	// all'inizio non ha nè capo nè coda
    	mia_coda.testa = NULL ;
    	mia_coda.coda = NULL ;
    	mia_coda.num_elem = 0 ;
    
    	enqueue (&mia_coda, 1);
    	enqueue (&mia_coda, 2);
    	enqueue (&mia_coda, 3);
    	enqueue (&mia_coda, 4);
    	enqueue (&mia_coda, 5);
    
    	nodo *n=mia_coda.testa;;
    	while (n) {
    		printf("%d\n", n->d);
    		n=n->next;
    	}
    
    	return (0);
    }

  7. #7
    Qua:

    codice:
    	else //...altrimenti...
    	{
    		c->coda->next = n;
    		c->coda = n;
    	}
    Così viene aggiunto l'ultimo elemento:

    codice:
    c->coda->next = n
    Adesso devi spostare il puntatore su di lui:

    codice:
    c->code = c->coda-> next

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.