Ciao a tutti,
chi mi aiuta?
Ho creato una lista dive ogni nodo è rappresentato da un salto e ogni volta che ne inserisco uno nuovo viene messo in rodine crescente a seconda del numero (del saltatore).
Ma se volessi invece metterli in ordine alfabetico della nazionalità (dove vengono espresse solo le
prime tre lettere) come devo fare?..io l'ordinamento alfabetico proprio non riesco a capirlo
..chi mi da una mano? grazie!! Vi posto il codice
codice:
#include<iostream>
#include<iomanip>
using namespace std;
const int VERO=1;
const int FALSO=0;
const int DIM=3;
struct Salto
{
int numero; //numero del giocatore
char nazione[DIM];
float distanza;
int giudizio;
};
struct Nodo
{
Salto dati;
Nodo *nextptr;
};
//prototipo
void cerca (int, Nodo *, int&, Nodo *&);
void inserisci (Salto, Nodo *&);
void stampa (Nodo *); //stampa tabella
//MAIN
int main ()
{
const char INSERISCI='ì';
const char FINE='f';
char operazione;
Salto nuovosalto;
Nodo *tabella=0;
cout<<"SALTI DEL GIORNO"<<endl;
cout<<endl<<endl;
cout<<"che operazione vuoi fare?"<<endl;
cin>>operazione;
cout<<endl;
while (operazione!=FINE)
{
cout<<"inserisci il numero del giocatore"<<endl;
cin>>nuovosalto.numero;
cout<<endl;
cout<<"inserisci la nazionalita' del giocatore (le prime tre lettere)"<<endl;
cin>>nuovosalto.nazione;
cout<<endl;
cout<<"inserisci la distanza del salto"<<endl;
cin>>nuovosalto.distanza;
cout<<endl;
cout<<"inserisci il giudizio del salto"<<endl;
cin>>nuovosalto.giudizio;
cout<<endl;
inserisci (nuovosalto, tabella);
stampa (tabella);
cout<<"che operazione vuoi fare?"<<endl;
cin>>operazione;
cout<<endl;
}
return 0;
}
//FINE MAIN
//DICHIARAZIONE DELLE FUNZIONI
void cerca (int valore, Nodo *testa, int&esiste, Nodo *&pos)
{
esiste=FALSO;
if ((testa==0) || (testa->dati.numero>valore))
pos=0;
else if (testa->dati.numero==valore)
{
esiste=VERO;
pos=0;
}
else
{
pos=testa;
int finito=FALSO;
while (finito==FALSO)
{
if (pos->nextptr==0)
finito=VERO;
else if ((pos->nextptr)->dati.numero==valore)
{
finito=VERO;
esiste=VERO;
}
else if ((pos->nextptr)->dati.numero>valore)
finito =VERO;
else
pos=pos->nextptr;
}
}
}
void inserisci (Salto nuovosalto, Nodo *&testa)
{
int esiste;
Nodo *pos;
cerca (nuovosalto.numero, testa, esiste, pos);
if (esiste==FALSO)
{cout<<"inserisci il nuovo salto"<<endl;
Nodo *temp;
temp=new Nodo;
if (pos==0)
{
temp->nextptr=testa;
testa=temp;
}
else
{
temp->nextptr=pos->nextptr;
pos->nextptr=temp;
}
temp->dati=nuovosalto;
}
}
void stampa (Nodo *testa)
{
Nodo *salt;
for(salt=testa; salt!=0; salt=salt->nextptr)
{ cout<<setw(5)<<salt->dati.numero<<setw(10)<<salt->dati.nazione<<setw(10)<<salt->dati.distanza
<<setw(10)<<salt->dati.giudizio<<endl;
}
cout<<endl;
}