Ordinamento Alfabetico lista concatenata

di il
13 risposte

Ordinamento Alfabetico lista concatenata

Ciao ragazzi, come da titolo vorrei creare un algoritmo in c che permetta l'ordinamento in ordine alfabetico per Cognome di queste liste di liste

QUESTE SONO LE LISTE UTILIZZATE

// Struttura per contenere i dati dei contatti
typedef struct {
char Cognome[40];
char Nome[40];
char Indirizzo[40];
char Citta[40];
char Email[40];
char NumeroTel[12];
} t_contatto;

//Struttura per creare la lista
struct elemento {
t_contatto inf;
struct elemento *pun;
};

potete darmi una mano?


Grazie delle risposte.

13 Risposte

  • Re: Ordinamento Alfabetico lista concatenata

    E che mano vorresti? Cosa sai fare/non sai fare? Cosa vorresti che facessimo noi?

    E perché parli di lista di liste? A me sembra una normale lista concatenata.
  • Re: Ordinamento Alfabetico lista concatenata

    Non riesco a fare l'algoritmo di ordinamento su questa lista concatenata, se è possibile avere l'algoritmo funzionante adattato alle mie esigenze, grazie.
  • Re: Ordinamento Alfabetico lista concatenata

    Se intendi il codice, no. Qui è vietato dal regolamento.
  • Re: Ordinamento Alfabetico lista concatenata

    Ho provato ad abbozzare questo codice, ma ogni volta che lo richiamo, mi crasha il programma
    struct elemento *ordineAlfabetico(struct elemento *p) {
    	char Iniziale1[1];
    	char Iniziale2[1];
    
    	char Cognome[40];
    	char Nome[40];
    	char Indirizzo[40];
    	char Citta[40];
    	char Email[40];
    	char NumeroTel[12];
    	struct elemento *copiaP = p;
    
    	do {
    		strncpy(Iniziale1, p->inf.Cognome, 1); //acquisisco l'iniziale di cognome1
    		//acquisisco tutti i dati
    		strcpy(Cognome, p->inf.Cognome);
    		strcpy(Nome, p->inf.Nome);
    		strcpy(Indirizzo, p->inf.Indirizzo);
    		strcpy(Citta, p->inf.Citta);
    		strcpy(Email, p->inf.Email);
    		strcpy(NumeroTel, p->inf.NumeroTel);
    		p = p->pun;
    		strncpy(Iniziale2, p->inf.Cognome, 1); //acquisisco l'iniziale di cognome2
    		if (p == NULL) //nel caso ci fosse solo un elemento
    		{
    			p = copiaP;
    		} else if (strncmp(Iniziale1, Iniziale2, 1) == 1) {
    			strcpy(p->inf.Cognome, Cognome);
    			strcpy(p->inf.Nome, Nome);
    			strcpy(p->inf.Indirizzo, Indirizzo);
    			strcpy(p->inf.Citta, Citta);
    			strcpy(p->inf.Email, Email);
    			strcpy(p->inf.NumeroTel, NumeroTel);
    			p = p->pun;
    		}
    	} while (p != NULL);
    	p = copiaP;
    	return (p);
    }
  • Re: Ordinamento Alfabetico lista concatenata

    Ma quale algoritmo di ordinamento vorresti adottare? Quale hai studiato? A prescindere dal tuo programma specifico ...
  • Re: Ordinamento Alfabetico lista concatenata

    Vorrei adottare il bubble sort
  • Re: Ordinamento Alfabetico lista concatenata

    Quindi comincia ad impostare il codice per un bubble sort come se lo facessi con un vettore di interi.

    Quando funziona perfettamente, lo adatti alla lista.
  • Re: Ordinamento Alfabetico lista concatenata

    Purtroppo ci sto sbattendo la testa da tantissimo tempo, ed a breve ho un esame e continua a non funzionare. :'(
  • Re: Ordinamento Alfabetico lista concatenata

    Questo è un problema per te ma devi pur sapere come si imposta un bubble sort ...
  • Re: Ordinamento Alfabetico lista concatenata

    oregon ha scritto:


    Questo è un problema per te ma devi pur sapere come si imposta un bubble sort ...
    Ma io l'algoritmo l'ho fatto e l'ho postato sopra, volevo solo sapere dove ho sbagliato, niente di chè...
  • Re: Ordinamento Alfabetico lista concatenata

    Ok, non ha senso utilizzare le iniziali, devi lavorare sull'intero cognome
  • Re: Ordinamento Alfabetico lista concatenata

    oregon ha scritto:


    Ok, non ha senso utilizzare le iniziali, devi lavorare sull'intero cognome
    Ma il problema non credo che sia l'uso della singola iniziale o di tutto il cognome, ma dell'algoritmo che mi fa craschare il programma ogni volta che lo richiamo...
  • Re: Ordinamento Alfabetico lista concatenata

    Si, l'algoritmo che hai usato non è corretto come non è corretto esaminare solo l'iniziale.

    Devi confrontare l'elemento corrente e il successivo (tutto il cognome) ed invertirli se necessario. Usa la strcmp per confrontare i cognomi.
Devi accedere o registrarti per scrivere nel forum
13 risposte