Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - S.O.S. esame!!!
Forum - C/C++ - S.O.S. esame!!!

Avatar
giuseppepio81 (Normal User)
Newbie


Messaggi: 1
Iscritto: 12/11/2006

Segnala al moderatore
Postato alle 19:12
Domenica, 12/11/2006
Ciao ragazzi!
qualcuno di voi saprebbe darmi una mano per questa traccia:

DATA UNA SUCCESSIONE POTENZIALMENTE INFINITA DI STRINGHE, MEMORIZZARE LE STRINGHE IN ORDINE ALFABETICO USANDO IL CONCETTO DI LISTA LINKATA.
ESSENDO LE STRINGHE DI LUNGHEZZA POTENZIALMENTE INFINITA IL NODO DELLA LISTA LINKATA DEVE CONTENERE UN PUNTATORE ALLA STRINGA DI INPUT.

Quello che non so fare è l'odinamento...

questo il codice di quello che ho prodotto sin ora (manca solo l'ordinamento):
Ps. il compilatore utilizzato è il Dev

#include <iostream.h>
#include <stdlib.h>
#include <string.h>

class lista{                     //definizione della classe lista
     private:
        class elem_lista{        //definizione della classe elem_lista
            public:
              char dato[30];                  //il dato e' contenuto in questo elemento    //il dato e' contenuto in questo elemento
            private:
              elem_lista *ptr_succ;  //puntatore all'elemento successivo
        friend class lista;
        };
     public:

        elem_lista *ptr_inizio;        //primo elemento della lista

       //inizializza la lista
        lista(void){ptr_inizio=NULL;}       //costruttore


       //inserimento di un nuovo elemento nella lista
       void ins_lista(char* nome);

       //cerca un elemento nella lista
       int cerca (char *nome);

       //visualizza gli elementi della lista
       void visual(void);

       //cancella un elemento della lista
       void canc (char* nome);

};


//prototipo, fornisce informazioni utili all'utente
void istruz_utente(void);
int main()
{
    lista lista1;          //definizione di una lista
    char val_ins[30];      //input, stringa che conterra' il valore da inserire nella lista
    char risp;             //input, contiene la scelta dell'utente

  istruz_utente();

while ((strcmp(val_ins, "stop")!=0) && (strcmp(val_ins, "STOP")!=0))
{
     cout << "\n\ndigita un nome da inserire nella lista \n "<<"(<stop> per terminare)\t\t --->  ";
     cin >> val_ins;

      if ((strcmp(val_ins, "stop")!=0)&& (strcmp(val_ins, "STOP")!=0))


     lista1.ins_lista(val_ins);
   }
     lista1.visual();

    cout<< "inserisci il nome da cercare nella lista -->  ";
    cin >> val_ins;
    cout << "la ricerca produrra' : \n\n";
    cout << "\t 1 se il nome cercato e' presente nella lista \n";
    cout << "\t 0 se il nome cercato non e' presente nella lista\n\n";
    cout << "\n risultato della ricerca "<< lista1.cerca(val_ins) <<'\n';

    cout << "\n inserisci il nome che vuoi eleminare dalla lista -->  ";
    cin >> val_ins;
    lista1.canc(val_ins);

    lista1.visual();
      system("PAUSE");
      return 0;
}

void istruz_utente(void)
{
cout<< "questo programma crea una lista di nomi\n ";
cout<< "effettuare una ricerca all'interno della lista per cercare il nome desiderato\n";
cout<< "puo' eliminare un elemento dalla lista.";
}

void lista::ins_lista(char* nome)
{
    elem_lista *ptr_nuovo;  //puntatore all'elemento successivo della lista

    ptr_nuovo= new elem_lista;

    strcpy(ptr_nuovo->dato, nome);
    //inserimento del dato all'inizio della lista
    ptr_nuovo->ptr_succ = ptr_inizio;
    ptr_inizio = ptr_nuovo;
}
      /*****************************************
       * parametri                             *
       *    nome - nome da cercare nella lista *
       *                                       *
       * restituisce                           *
       *     1 se il nome viene trovato        *
       *     0 se il nome non viene trovato    *
       *****************************************/
int lista::cerca(char *nome)
{
    // struttura in cui stiamo cercando il dato
   elem_lista *ptr_corrente;

   ptr_corrente = ptr_inizio;
   while(ptr_corrente !=NULL)
  {
     if (strcmp(ptr_corrente->dato, nome)==0)
       break;
     ptr_corrente= ptr_corrente->ptr_succ;
  }
  return(ptr_corrente != NULL);
}
// funzione che permette di visualizzare la lista

void lista::visual(void)
{
   elem_lista *ptr_attuale;
   ptr_attuale = ptr_inizio;

   while (ptr_attuale != NULL)
   {
     cout<< "il nome nella lista e' " <<ptr_attuale->dato <<"\n";
     ptr_attuale = ptr_attuale->ptr_succ;
   }
}
//funzione che permette di cancellare un elemento dalla lista

void lista::canc (char* nome)
{
   elem_lista *ptr_prec;        //puntatore all'elemento precedente della lista
   elem_lista *ptr_canc;
   elem_lista *ptr_dopo;

   ptr_prec = ptr_inizio;
   ptr_canc = ptr_prec->ptr_succ;
   ptr_dopo = ptr_canc->ptr_succ;

    while(ptr_dopo != NULL)
   {               //se il dato da cancellare e' il primo della lista
      if (strcmp(ptr_prec->dato, nome)==0)
      {
         ptr_inizio = ptr_prec->ptr_succ;
         break;
      }
    //se il dato da cancellare e' uno qualunque (non uno degli estremi!!!)
   if (strcmp(ptr_canc->dato, nome)==0)
    {
       ptr_prec->ptr_succ = ptr_canc->ptr_succ;
        break;
    }
   //dobbiamo avanzare
   ptr_prec = ptr_canc;
   ptr_canc = ptr_dopo;
   ptr_dopo = ptr_dopo->ptr_succ ;

     //se il dato da cancellare e' l'ultimo della lista
   if (strcmp(ptr_dopo->dato, nome)==0)
   {
    ptr_canc->ptr_succ = ptr_dopo->ptr_succ;
    break;
   }
}
}

PM Quote
Avatar
posta10100 (Normal User)
Rookie


Messaggi: 27
Iscritto: 23/10/2006

Segnala al moderatore
Postato alle 9:53
Martedì, 14/11/2006
potresti provare ad ordinare gli elementi utilizzando il risultato di strcmp... a seconda che il risultato sia > o < di 0 sai se la stringa va prima o dopo...


Tutti sanno che una cosa è impossibile da realizzare, finché arriva uno sprovveduto che non lo sa e la inventa.
A. Einstein
PM Quote
Avatar
nikipe_silver (Founder Member)
Expert


Messaggi: 339
Iscritto: 20/09/2005

Segnala al moderatore
Postato alle 17:19
Mercoledì, 15/11/2006
cerca qualcosa riguardante il bubble sort


c'e' qualcosa in questa pizza che non mi quadra...
E' logico, e' tonda..E' facile se ci pensi..
PM Quote