Newsgroup: it.comp.lang.c++
Titolo: Numero al posto giusto

aiutarmi a trovare una soluzione più facile ;-)
ciò che dici è la soluzione più ovvia, non la più performante, in
effetti, ma mi sembra di capire che non hai bisogno di cose
performanti, ma facili... e questa che tu hai dato è la più facile
l'unica cosa è questa: come ti crei inizialmente la lista? potresti
inserire i numeri man mano che li hai e così crearti la lista che
sarebbe già ordinata e quindi non ha bisogno di essere ordinata ogni
volta che inserisci un numero
-- 
]\/[ad]\/[age (
www.mindreamz.net
)
"Un Maestro insegue semplicemente la sua visione di Eccellenza in
qualunque cosa sta facendo e lascia agli altri decidere se sta 
lavorando o giocando. A lui sembra sempre di fare entrambe." - Anonimo

aiutarmi a trovare una soluzione più facile ;-)
ah, a proposito, ti consiglio di guardarti la libreria standard e la
clase list<>


 volta che inserisci un numero
E come potrei fare, per ordinare la lista mentre la creo? :-()



usando lo stesso metodo di cui abbiamo parlato finora!!!!
iniziamo, lista vuota, metto un elemento, tutto ok, la lista è
3
poi metto il secondo elemento e cerco il primo valore maggiore del mio
elemento
1 3
poi metto il terzo elemento e cerco i lprimo valore maggiore del mio
elemento
1 2 3
e così via


Ho provato a fare una cosa del genere, ma ordina soltanto il primo numero
:-((
#include <iostream>
using namespace std;
struct nodo
{
int dato;
struct nodo *next;
};
struct nodo *testa;
struct nodo *aux;
struct nodo *fine;
int main ()
{
int x;
cout<<"Inserire dato" <<endl;
cin>>x;
while (x)
{
        aux=new (struct nodo);
        aux->dato=x;
        aux->next=0;
        if (!fine)
                testa=aux;
        else
                fine->next=aux;
        fine=aux;
        if ((fine!=testa) && (x<testa->dato))
        {
                aux->dato=testa->dato;
                testa->dato=x;
        }
cout<<"Inserire dato" <<endl;
cin>>x;
}
cout<<"Stampare lista" <<endl;
while (testa)
{
        cout<<testa->dato << " ";
        testa=testa->next;
}
return 0;
}

 aiutarmi a trovare una soluzione più facile ;-)
Se vuoi gestirti manualmente una lista per motivi didattici è un altro
discorso, ma se vuoi fare presto e bene, la soluzione più ovvia e facile è
sicuramente questa: utilizzare STL.
Ecco un esempio che chiede N numeri, li mette in una lista e ne fa il sort.
Con std::list non devi preoccuparti di allocare le strutture e di gestire i
puntatori, anche per il sort c'è un metodo che fa tutto il lavoro per te.
Ciao.
#include <iostream>
#include <list>
#include <iterator>
int main(int argc, char* argv[])
{
        std::list<int> L;
        int N,n;
        std::cout << "Numeri ? ";std::cin >> N;
        for (int i=0;i<N;i++) {
                std::cout << "Numero " << i+1 << " ? ";
                std::cin >> n;
                L.push_back(n);
        }
        L.sort();
        copy(L.begin(), L.end(),std::ostream_iterator<int>(std::cout, " "));
        return 0;
}

Tux wrote:
In pseudocodice-pseudoC-pseudocorretto:
// inserisce nella 'giusta posizione' un valore
procedure inserisci_giusto(x)
{
   nodo n;
   n.valore = x;
   // caso particolare: "x" ad inizio lista
   if(x < testa_lista.valore)
   {
     n.next = testa_lista;
     testa_lista = n;
     return
   }
   // caso "normale": devo scorrere la lista per trovare la posizione
   a = testa_lista
   while(a.valore < x)
   {
     b = a;
     a = a.next;
   }
   /* aggiungere un po' di codice per non fare casino se si e' a fine
    * lista... */
   n.next = a;
   b.next = n;
   return;
}
main()
{
   for(;;)
   {
     cin >> x;
     if(x == 0) break;
     inserisci_giusto(x);
   }
}
Hai capito ora?
-- 
/**
  * Mattia Belletti - Undergraduate student @ 
cs.unibo.it
  * ICQ: 33292311   - email: 
mbel...@cs.unibo.it
  * IRC: BluShine   - site(s): 
http://cs.unibo.it/~mbellett
  * Linux registered user 299762 @ Linux registered machine 213003
  */