Ver Mensaje Individual
  #1 (permalink)  
Antiguo 20/05/2010, 00:49
Pol17
 
Fecha de Ingreso: mayo-2010
Mensajes: 5
Antigüedad: 14 años, 6 meses
Puntos: 0
Exclamación ayuda con ordenamiento de nodos por favor urgente !!

tengo el codigo listo solo me falta el metodo ordenar de menor a mayor para que este listo el programa pero no encuentro la forma de resolver el metodo ordenar , porfa que alguien me ayude .. el metodo tiene que ser recursivo

aqui esta lo que llevo en el codigo , esta en c (bloodshed)

#import <stdio.h>
#import <stdlib.h>

struct tipoNodo{
int valor;
struct tipoNodo *sig;
};
typedef tipoNodo *pNodo;
typedef tipoNodo *Lista;

void MostrarLista(Lista lista);
void insertar(Lista *lista,Lista *ultimo);
int ListaVacia(Lista lista);
void borrar(Lista *lista);
void ordenar(Lista *lista);

int main(){
int opc=0;
Lista lista=NULL;
Lista ultimo=NULL;
while(opc==0){
printf("*********************Menu***************** ************\n");
printf("****************************************** ************\n");
printf("1.-Ingresar Valores a la Lista.\n");
printf("2.-Ordenar la Lista.\n");
printf("3.-Borrar valores de la Lista.\n");
printf("4.-Salir.\n");
printf("****************************************** ************\n");
scanf("%d",&opc);
if(opc==1){
insertar(&lista,&ultimo);
opc=0;
}else if(opc==2){
MostrarLista(lista);
ordenar(&lista);
opc=0;

}else if(opc==3){
borrar(&lista);
opc=0;
}
else if(opc==4){
system("cls");
system("pause");
}
}



}


int ListaVacia(Lista lista){
return(lista==NULL);
}
void MostrarLista(Lista lista){
pNodo nodo=lista;
if(ListaVacia(lista))
printf("La lista esta vacia\n");
else{
while(nodo){
printf("%d -> ",nodo->valor);
nodo=nodo->sig;
}
printf("\n");
}
}
void insertar(Lista*lista,Lista*ultimo){
system("cls");
MostrarLista(*lista);
int continuar=1;
pNodo nodo;
printf("Desea Ingresar Un Elemento Si=1,No=0 : ");
scanf("%d",&continuar);
if(continuar!=1)return;

else{
nodo=(pNodo)malloc(sizeof(tipoNodo));
printf("Ingrese Valor: ");
scanf("%d",&nodo->valor);
if(*lista==NULL){
*lista=nodo;
nodo->sig=NULL;
*ultimo=*lista;
insertar(lista,ultimo);
}else{
(*ultimo)->sig=nodo;
(*ultimo)=nodo;
(*ultimo)->sig=NULL;
insertar(lista,ultimo);
}
}
}

void borrar(Lista *lista){
pNodo nodo,anterior;
int resp=0,dato=0;
MostrarLista(*lista);
printf("Desea Eliminar un Elemento? Si=1,No=0: ");
scanf("%d",&resp);
if(resp==0)
return;
else{
printf("Que Elemento Desea Borrar : ");
scanf("%d",&dato);
nodo=*lista;
if((*lista)->valor==dato){
nodo=*lista;
*lista=nodo->sig;
free(nodo);
borrar(lista);
}
else{
while(nodo!=NULL){
if(nodo->valor==dato){
anterior->sig=nodo->sig;
free(nodo);
borrar(lista);
}
else{
anterior=nodo;
nodo=nodo->sig;
}
}
}

}
}
void ordenar(Lista *lista){
system("cls");
MostrarLista(*lista);
pNodo menor,mayor,buscar,ord;
ord=*lista;
menor=*lista;
mayor=*lista;
buscar=*lista;
while(buscar!=NULL){
if(menor->valor > mayor->sig->valor){
*lista=mayor->sig->valor;
menor->valor=(*lista)->sig;
ordenar(&lista);
}
}
}