Ver Mensaje Individual
  #15 (permalink)  
Antiguo 20/08/2008, 00:24
yackcae
 
Fecha de Ingreso: junio-2008
Mensajes: 63
Antigüedad: 15 años, 11 meses
Puntos: 2
Respuesta: Cadenas y Listas en C++

La verdad no había visto tú código detenidamente, solo le dí un vistazo, ahora me doy cuenta, lo que estas tratando de hacer es ordenar una lista enlazada, pero eso no se puede usando direccionamiento de arreglos (A[j-1] = A[j]), hay que usar apuntadores, la explicación de como hacerlo me quedaría demasiado larga y complicada, por lo que te paso el código ya terminado, es tú mismo código pero le he agregado una función para ordenar la lista:

Código:
#include <iostream>

using namespace std;

struct Valor
{
	int num;
};

struct Nodo;
typedef Nodo *PNodo;

struct Nodo
{
	Valor info;
	PNodo sig;
};

typedef PNodo Lista;

void ordenar(Lista l)
{
	int fin;
	PNodo nodo;
	if(!l) return;
	do {
		fin=0;
		for (nodo=l; nodo->sig; nodo=nodo->sig) {
			if (nodo->info.num<nodo->sig->info.num) {
				fin=nodo->info.num; // Uso fin como variable temporal
				nodo->info.num=nodo->sig->info.num;
				nodo->sig->info.num=fin;
				fin=1;
			}
		}
	} while(fin==1);
}

int main()
{
	Lista l;
	int x;
	char op;
	PNodo anterior,nuevo,aux;

	l=NULL;
	do {
		cout << "\nNumero: ";
		cin >> x;

		nuevo=new(Nodo);
		nuevo->info.num=x;

		if (l==NULL)
			l=nuevo;
		else
			anterior->sig=nuevo;

		anterior = nuevo;
		cout << "Ya has acabado de introducir numeros";
		cout << " (s/S)?";
		cin >> op;
	} while ((op!='s') && (op!='S'));

	nuevo->sig=NULL;

	cout<<"\nLa lista generada de mayor a menos es: \n"<< endl;

	ordenar(l); // Función de ordenación por método de la burbuja usando apuntadores

	aux=l;

	while (aux!=NULL) {
		cout <<(*aux).info.num << " " ;
		aux=(*aux).sig ;
	}

	cout << "\n" << endl;

	system ("pause");
	return 0;
}