Sono andato a vedere l'esame di programmazione ed è uscita la seguente traccia:
Testo della prova
Implementare in linguaggio C++ un tipo di dato astratto Lista allocato dinamicamente. Ogni elemento della lista dovrà contenere le seguenti informazioni:
- Nome, di tipo string; (si può utilizzare la classe string fornita dalle librerie)
- Età, di tipo int, che indica l'età del soggetto.
Sulla lista dovranno essere realizzati i seguenti metodi (oltre ovviamente a costruttore e distruttore):
Empty() Verifica se la lista è vuota.
Initialize(const string valore[], const int eta[], int dim ) Inserisce inizialmente i valori presenti nell'array dei nomi con le rispettive età indicate nell'array eta.
Elimina(const string valore) Elimina l'elemento valore dalla lista.
Stampa() Visualizza a video gli elementi contenuti nella lista, con l'età.
In aggiunta si implementino le seguenti funzioni:
Insert(const string val) Inserisce in coda un nuovo valore nella lista, se il valore non è presente.
Ordina( ) Ordina la lista in funzione dell'età;
Ho saputo implementare tutte le funzioni tranne quella Ordina(), qualcuno può aiutarmi???
Il mio file di specifica lista.h è :
Vi metto per completezza anche il file di implementazione e il main...anche se nn penso servano a molto per il mio problema:codice:using namespace std; struct nodo; typedef nodo* N; struct nodo{ int eta; string nome; N next; }; class lista{ N testa; public: lista():testa(0){} bool empty(); void initialize(const string valore[],const int eta[],int dim); void elimina(const string valore,const int eta); void stampa(); void insert(const string val,const int eta); void ordina(); ~lista(); }; void n2();
lista.cpp
mainlista.cpp(file utente):codice:#include <iostream> #include "lista.h" #include <string> using namespace std; void n2(){ cout<<"\n\n"; } bool lista::empty(){ return (testa==0); } lista::~lista(){ for(N q=testa;q!=0;testa=q){ q=testa->next; delete testa; } } void lista::initialize(const string valore[],const int eta[],int dim){ for(int i=0;i<dim;i++){ N q=new nodo; q->nome=valore[i]; q->eta=eta[i]; q->next=testa; testa=q; } } void lista::stampa(){ cout<<"Stampa....\n\n"; for(N temp=testa;temp!=0;temp=temp->next){ cout<<"\nNome: "<<temp->nome; cout<<"\nEta': "<<temp->eta; } cout<<"\n\n"; }//Chiude la stampa //Inserisce in coda un nuovo valore nella lista, se il valore non è presente void lista::insert(const string val,const int eta){ N t=testa; bool trovato=false; while(t!=0 && !trovato){ if(((t->nome==val)) && (t->eta==eta))trovato=true; else t=t->next; } if(!trovato){ N q=new nodo; q->nome=val; q->eta=eta; q->next=0; N temp=testa; //Devo far puntare l'ex ultimo elemento al nuovo elemento inserito che sarà l'ultimo while(temp->next!=0)temp=temp->next; temp->next=q; } else cout<<"\n\nElemento da inserire gia' esistente:"; }//Chiude l'insert void lista::elimina(const string val,const int eta){ bool trovato=false; N temp=testa; N prec; while((temp!=0) && (!trovato)){ if((temp->nome==val)&&(temp->eta==eta))trovato=true; else{ prec=temp; temp=temp->next; }//chiude l'else } if(trovato){ if(temp==testa){//Se l'elemento da eliminare sta in testa basta mettere in testa quello a cui //l'ex elemento di testa(quello da eliminare) puntava! testa=testa->next; delete temp; } else if(temp==0){//Se l'elemento da eliminare sta in coda basta far puntare il penultimo elemento a //0 e eliminare l'elemento di coda prec->next=0; delete temp; } else{//Se l'elemento da eliminare non sta nè in coda nè in testa procedo in questo modo N l=temp; temp=temp->next; prec->next=temp; delete l; } }//Chiude l'if(trovato) else cout<<"Elemento da eliminare non trovato!!"; n2(); }//Chiude la funzione elimina void Ordina(){..... ................??????.......... }
p.s.Mi dite anche se ho implementato bene la funzione distruttore???codice:#include <iostream> #include <string> #include "lista.h" #include <windows.h> using namespace std; int main(){ lista l; int dim; dim=3; string nomi[dim]; int et[dim]; nomi[0]="Mario"; et[0]=20; nomi[1]="Giuseppe"; et[1]=35; nomi[2]="Fabrizio"; et[2]=40; l.initialize(nomi,et,dim); cout<<"La lista inserita e': \n\n"; l.stampa(); l.insert("Mario",10); n2(); l.stampa(); l.elimina("Fabrizio",40); cout<<"Elimino Fabrizio, 40..."; n2(); Sleep(2222); l.stampa(); system("PAUSE"); return 0; }
Grazie in anticipo per le risposte!!!

Rispondi quotando