Visualizzazione dei risultati da 1 a 4 su 4
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    3

    Togliere elementi ripetuti da una lista

    Salve gente,
    Stò studiando il linguaggio C per l'esame di Fondamenti di Informatica e non riesco a trovare una soluzione per togliere da una lista gli elementi ripetuti.

    Ho fatto le funzioni per creare e visualizzare la lista e adesso devo completare quella che controlla gli elementi della lista ed elimini i doppioni. Io per risolvere il problema ho cercato di fare una funzione che per ogni elemento della lista verifica se c'è un elemento uguale nelle posizioni successive e se è cosi lo elimino.

    Il problema è che riesco a fare solo il confronto del primo elemento con i successivi ma non so come fare per far ripartire da capo il controllo partendo stavolta dal secondo e cosi via!
    Spero di trovare qualcuno che possa spiegarmi se il mio ragionamento è corretto e in ogni caso come fare a risolvere questo esercizio con le liste, è da giorni che faccio numerose prove e non ci stò capendo più nulla.

    Questo è il listato che ho fatto:


    #include <stdio.h>
    #include <malloc.h>
    #include <string.h>

    struct elemento {
    char nome[20];
    int eta;
    struct elemento *pun;
    };

    struct elemento *crealista();
    void eliminarip(struct elemento *);
    void visualizza (struct elemento *);


    /*................................................*/
    main()
    {
    struct elemento *puntlista;


    puntlista=crealista();

    visualizza(puntlista);

    eliminarip(puntlista);

    visualizza(puntlista);

    system("pause");
    }

    /*..............................................*/
    struct elemento *crealista()
    {
    struct elemento *p, *paus;
    int i,n;
    printf("\nQuanti nomi vuoi inserire nella lista?\t");
    scanf("%d",&n);

    p= (struct elemento*)malloc(sizeof(struct elemento));

    printf("\n\n\t\t\tINSERIMENTO INFORMAZIONI NELLA LISTA\n");
    printf("\nInserisci il primo nome della lista: ");
    scanf("%s",p->nome);
    printf("\nInserisci l'eta' di %s: ",p->nome);
    scanf("%d", &p->eta);
    paus=p;


    for(i=2;i<=n;i++){
    paus->pun=(struct elemento *)malloc(sizeof(struct elemento));
    paus=paus->pun;
    printf("\n\nInserisci il %d nome della lista: ",i);
    scanf("%s",&paus->nome);
    printf("\nInserisci l'eta' di %s: ",paus->nome);
    scanf("%d", &paus->eta);
    }


    paus->pun=NULL;



    return (p);
    }



    /*................................................. ...*/
    void visualizza(struct elemento *p)
    {


    printf("\n\n ELEMENTI DELLA LISTA\n\n");
    while(p!=NULL){

    printf("\n %s %d \n\n", p->nome, p->eta);
    p=p->pun;
    }

    }


    /*................................................*/
    void eliminarip(struct elemento *p)
    {
    int i,x;
    struct elemento *p1,*p2,*aux;

    p1=p;
    p2=p1->pun;
    printf("\n eliminazione elementi ripetuti in corso.....\n\n");
    system("pause");



    while(p2->pun!=NULL)
    {
    if ((x=(strcmp(p1->nome,p2->nome)))==0)
    {
    printf("\n\n Si stanno confrontando: %s e %s \t sono UGUALI\n", p1->nome,p2->nome);
    p1->pun=p2->pun;
    aux=p2;
    p2=p1->pun;
    free(aux);
    printf("\n \nelemento doppio eliminato...\n\n");
    printf("\n p2 ora e': %s\n\n\n", p2->nome);
    }
    else
    {
    printf("\n si stanno confrontando: %s e %s \t sono DIVERSI\n\n", p1->nome,p2->nome);
    p2=p2->pun;
    printf("\n p2 ora e': %s\n",p2->nome);
    }


    if((p2->pun)==NULL)
    {
    printf("\n\n confronto elemento successio con i prossimi");
    p1=p->pun;
    p2=p1->pun;
    printf("\n p1 adesso e uguale a : %s \ne p2 e' uguale a : %s ", p1->nome, p2->nome);
    }

    }



    }

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,296

    Moderazione

    Ricorda il linguaggio anche nel titolo, come da Regolamento.

    Ciao!
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    3

    Re: Moderazione

    Originariamente inviato da alka
    Ricorda il linguaggio anche nel titolo, come da Regolamento.

    Ciao!
    ok! ho letto il regolamento me ne ricorderò per le prossime volte!
    Ciao

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2006
    Messaggi
    3
    nessuno può darmi un aiutino?

    so che non è una cosa complicata ma io non ci riesco...

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 © 2024 vBulletin Solutions, Inc. All rights reserved.