Linguaggio C, stampare il capofila di una lista SCL

di il
9 risposte

Linguaggio C, stampare il capofila di una lista SCL

Una volta che ho inserito i dati nella lista, devo stampare il capofila.

Ma il capofila è il primo elemento che inserisco o l'ultimo?.. Il primo, giusto?

Io inserisco:

Nome: a
Nome: b
Nome: c


Poi richiamo la funzione:
Persona* capofila(filaSCL fila)
{
	if(fila == NULL)
		return NULL;
	else
		return &fila -> elemento;

}
La quale mi ritorna in valore che stampo nel main, ovvero c.

Oppure questa:
Persona* capofila(filaSCL fila)
{
	if(fila == NULL)
		return NULL;
	else
	{
		while(fila -> != NULL)
		{
			fila = fila -> next;
		}
		return &fila -> elemento;
	}

}
La quale mi ritorna a da stampare.

è quest'ultima quella giusta da usare, vero? Perché il capofila è il numero uno della fila, ovvero quello che viene inserito per prima.. Mi è venuto il dubbio

9 Risposte

  • Re: Linguaggio C, stampare il capofila di una lista SCL

    Dipede come inserisci. il capo file è il primo cioè fila->elemento
  • Re: Linguaggio C, stampare il capofila di una lista SCL

    Questo è il mio inserimento:
    	int n;
    	printf("n: "); scanf("%d", &n);
    	while(i < n)
    	{
    		f = malloc(sizeof(nodoFilaSCL));
    		printf("Nome: "); scanf("%s", f->elemento.nome);
    		
    		f -> next = punt_f;
    		punt_f = f;	
    		
    		i++;
    	
    	}
  • Re: Linguaggio C, stampare il capofila di una lista SCL

    Tu inserisci in testa per forza che il primo elemento è l'ultimo inserito.
  • Re: Linguaggio C, stampare il capofila di una lista SCL

    Ma va bene così?
  • Re: Linguaggio C, stampare il capofila di una lista SCL

    Dipende cosa vuoi raggiungere. Se vuoi che il primo elemento inserito rimanga primo devi rivedere il codice dell'inserimento. Ovvero quando inserisci un elemento devi scorrere fino alla fine della coda e poi inserire il nuovo.
     
    Coda *p = testa;
    
    while(p->next); //scorre fino all'ultimo elemento
    
    Coda *nuovo = malloc(......) ecc;
    nuovo->next = NULL;
    p->next = nuovo;
    
    return testa;
          
           
    così l'inserimento viene fatto in coda
  • Re: Linguaggio C, stampare il capofila di una lista SCL

    Andrebbe bene così l'inserimento in coda?
    #include <stdio.h>
    #include <stdlib.h>
    
    struct el{
    	int n;
    	struct el *next;
    
    };
    
    typedef struct el nodoFila;
    typedef nodoFila *F;
    
    int main()
    {
    	F lista, nuovo;
    	//Inserimento in coda
    	lista = malloc(sizeof(nodoFila));
    	lista->n = 5;
    	while(lista->next);
    	nuovo = malloc(sizeof(nodoFila));
    	nuovo -> n = 4;
    	nuovo -> next = NULL;
    	lista -> next = nuovo;
    	
    	while(lista != NULL)
    	{
    		printf("el: %d", lista->n);
    		lista = lista -> next;
    	}
    }
    E se volessi metterlo dentro ad un for? Non ci riesco
  • Re: Linguaggio C, stampare il capofila di una lista SCL

    Ho sbagliato anch'io nel while (ho creato un giro infinito), infatti avevo in mente il for.
    Cmq il while dev'essere modificato così
    while(lista->next)
    lista = lista ->next;
    Invece col for
    for(;lista->next;lista = lista->next);
    Da notare che quando inserisci un nuovo elemento devi prima impostare il suo campo next a NULL come nel mio esempio.
  • Re: Linguaggio C, stampare il capofila di una lista SCL

    Il tuo esempio
        #include <stdio.h>
        #include <stdlib.h>
    
        struct el{
           int n;
           struct el *next;
    
        };
    
        typedef struct el nodoFila;
        typedef nodoFila *F;
        F inserisciElem(F testa,int n);
    
        int main()
        {
           F lista = NULL;
           //Inserimento in coda
           for(int i = 0; i < 5; i++)
                  lista = inserisciElem(lista,i);
           
           while(lista != NULL)
           {
              printf("el: %d", lista->n);
              lista = lista -> next;
           }
        }
    
    F inserisciElem(F testa, int n)
    {
           F p = malloc(sizeof(nodoFila));
           p->n = n;
           p->next = NULL;
           if(testa == NULL)
               return p;
           F temp = NULL;
           for(temp = testa; temp->next; temp = temp->next);
           temp->next = p;
           return testa;
    }
  • Re: Linguaggio C, stampare il capofila di una lista SCL

    Ok, ho capito. Grazie mille!
Devi accedere o registrarti per scrivere nel forum
9 risposte