Ayuda para ordenar Lista con cualkier metodo

r0y
07 de Mayo del 2005
Hola, primero ke nada gracias por su atencion,
Veran, tengo un problema, me encargaron un trabajo de listas ke insertara, mostrara y ordenara su contenido; el trabajo ya lo entregue, incompleto =( , me falto el metodo de ordenar.
La forma en ke tengo ke hacerlo es por ID, pero tmb se tienen ke ir junto con el ID sus otros elementos: nombre y precio.
Keria utilizar el metodo de insercion directa (o baraja) pero cuando lo compilada me decia ke la variable x2 necesitaba un Lvalue, a ke se refiere???
aki esta el codigo ke hice, aclaro ke soy newbie en esto totalmente.


#include<iostream.h>
#include<conio.h>
#include<stdio.h>
using namespace std;
struct nodo
{
char nombre[60];
int id;
float precio;
struct nodo *izq, *der;
}*ppal, *siguiente, *elemento, *aux, *aux1, *aux2;



main(){
char r[1],x2[60];
int o=0,x1;
float x3;


while (o!=4){
cout<<"1.Agregar nodon";
cout<<"2.Ver contenido de nodosn";
cout<<"3.Ordenar nodos n";
cout<<"4. Salir nn";
cout<<"Opcion: ";
cin>>o;

switch (o){
case 1:
ppal=NULL;
do{
if (ppal==NULL)
{
ppal=new nodo;
ppal->izq=NULL;
ppal->der=NULL;
cout<<"idn";
cin>>ppal->id;
cout<<"nnombren";
cin>>ppal->nombre;
cout<<"nprecion";
cin>>ppal->precio;
elemento=ppal;
}
else
{
siguiente=new nodo;
siguiente->izq=elemento;
siguiente->der=NULL;
elemento->der=siguiente;
cout<<"idn";
cin>>siguiente->id;
cout<<"nnamen";
cin>>siguiente->nombre;
cout<<"nprecion";
cin>>siguiente->precio;
elemento=siguiente;
}
cout<<"agregar otro?[s/n]n";
cin>>r;
}while (r[0]=='s');
break;

case 2:
if (ppal==NULL)
{
cout<<"no hay nodosnn";
}
else
{
aux=ppal;
while (aux!=NULL)
{
cout<<"ID: " <<aux->id <<"n";
cout<<"NOMBRE: " <<aux->nombre <<"n";
cout<<"PRECIO: " <<aux->precio <<"nn";
aux=aux->der;
}
}
getch();
break;

case 3:
if (ppal==NULL)
{
cout<<"no hay nodos para ordenarnn";
}
else
{

aux1=ppal;
aux2=aux1->der;
while (aux1!=NULL && aux2!=NULL)
{
if (aux1->id > aux2->id)
{
x1=aux2->id;
x2=aux2->nombre;
x3=aux2->precio;

aux2=ppal;

aux1->id=x1;
aux1->nombre=x2;
aux1->precio=x3;

cout<<"oknn"; //no mas para ke devuelva algo
}
else
{
aux1=aux1->der; //segun esto como un incrementador
}
}
}


}
}

}


chuidiang
07 de Mayo del 2005
Hola:

Si declaras un array, por ejemplo

char x2[60];

luego no puedes hacer cosas como esta

x2 = ...

o te dará el error del lvalue.

En su lugar, debes rellenar el contenido del array con fuciones strcpy() o strcat().

Donde haces

aux2=aux1->der;

deberías hacer

strcpy (aux2, aux1->der);

suponiendo siempre que aux1->der sea tipo char* y contenga una cadena de texto valida que termine en .

Se bueno.