Ayuda para ordenar Lista con cualkier metodo
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
}
}
}
}
}
}
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
}
}
}
}
}
}
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.
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.