Hola a todos estoy aprendiendo a programar en c y tengo un problema q no puedo solucionar ni buscandolo en internet ... El problema es en la parte de la ordenacion de una lista aqui les dejo el codigo, desde ya muchas graciasss!!!
/******************************************
* *
* Autor : Singh Pablo Roberto Manuel *
* Ejercicio nro 10 *
* *
******************************************/
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define V 1
#define F 0
#define M 20
struct tauto
{
int codigo;
char marca[M];
char modelo[M];
char color[M];
struct tauto *sig;
};
typedef struct tauto coche;
//Prototipos.-
void menu();
void agregar (coche ** , int *);
void borrar (coche ** , int *);
void buscar (coche ** , int *);
void ordenar (coche ** , int *);
void mostrar (coche ** , int *);
void copiar (coche ** , coche ** );
int main()
{
int ind=0,*indx; //Indice de cantidad de elementos en la lista
indx=&ind;
char opcion='z'; //Opcion para el menu
coche *cabeza;
cabeza=NULL;
//======== Bucle Menu ========//
for ( ; opcion!='s' && opcion!='S' ; )
{
menu();
fflush(stdin);
printf("%c\n",opcion=getch());
switch (opcion)
{
case '1': agregar(&cabeza,indx);
break;
case '2': borrar(&cabeza,indx);
break;
case '3': buscar(&cabeza,indx);
break;
case '4': ordenar(&cabeza,indx);
break;
case '5': mostrar(&cabeza,indx);
break;
case 'S':;
case 's': printf("\nCerrando programa...\n");
break;
default:
printf("\nIngrese una opcion valida...\n\n");
system("pause");
break;
}
}
//======== Fin Bucle Menu ========//
system("pause");
return 0;
}
void agregar( coche **cabeza, int *indx)
{
coche *p;
p=NULL;
if ( (*cabeza)==NULL )
{
printf("Lista vacia.-\n");
p=(coche *)malloc(sizeof(coche));
printf("\nAuto nro %i : ",*indx+1);
printf("\n\tCodigo : ");
scanf("%i",&p->codigo);
printf("\tMarca : ");
scanf("%s",p->marca);
printf("\tModelo : ");
scanf("%s",p->modelo);
printf("\tColor : ");
scanf("%s",p->color);
p->sig=NULL;
(*cabeza)=p;
}
else
{
p=(coche *)malloc(sizeof(coche));
printf("\nAuto nro %i : ",*indx+1);
printf("\n\tCodigo : ");
scanf("%i",&p->codigo);
printf("\tMarca : ");
scanf("%s",p->marca);
printf("\tModelo : ");
scanf("%s",p->modelo);
printf("\tColor : ");
scanf("%s",p->color);
p->sig=(*cabeza);
(*cabeza)=p;
}
(*indx)=(*indx+1);
printf("\n");
system("pause");
}
void borrar ( coche **cabeza,int *indx )
{
int i,codigo=0,flag=F;
coche *p,*anterior=NULL;
p=(*cabeza);
printf("\nIngrese el codigo del auto a borrar : ");
scanf("%i",&codigo);
for (i=0;i<(*indx);i++)
{
if ( anterior==NULL )
{
if ( p->codigo==codigo )
{
(*cabeza)=p->sig;
free(p);
//p=cabeza;
(*indx)=(*indx-1);
flag=V;
printf("\nSe borro con exito! .- \n");
break;
}else
{
anterior=p;
p=p->sig;
}
}
else
{
if ( p->codigo==codigo )
{
anterior->sig=p->sig;
free(p);
(*indx)=(*indx-1);
flag=V;
printf("\nSe borro con exito! .- \n");
break;
}else
{
anterior=p;
p=p->sig;
}
}
}
if ( flag == F )
printf("\nNo se encontro el auto.- \n");
printf("\n");
system("pause");
}
void buscar ( coche **cabeza,int *indx )
{
int i,flag=F;
char mod[M];
coche *p;
p=(*cabeza);
printf("\nIngrese el modelo a buscar : ");
scanf("%s",&mod);
printf("Auto : ");
for ( i=0;i<(*indx);i++ )
{
if ( strcmp(p->modelo,mod)==0 )
{
printf("\n\tCodigo : %i",p->codigo);
printf("\n\tMarca : %s",p->marca);
printf("\n\tModelo : %s",p->modelo);
printf("\n\tColor : %s\n\n",p->color);
flag=V;
break;
}else
p=p->sig;
}
if ( flag == F )
printf("\n\tNo encontrado.-\n");
printf("\n");
system("pause");
}
void mostrar( coche **cabeza,int *indx)
{
int i;
coche *p;
p=(*cabeza);
printf("\n======Mostrando======\n");
printf("\nElementos en la lista : %i \n",*indx);
for (i=0;i<(*indx);i++)
{
printf("\nAuto nro %i : ",i+1);
printf("\n\tCodigo : %i",p->codigo);
printf("\n\tMarca : %s",p->marca);
printf("\n\tModelo : %s",p->modelo);
printf("\n\tColor : %s\n\n",p->color);
p=p->sig;
}
printf("\n");
system("pause");
}
void copiar (coche **d, coche **f)
{
coche *temp,*dest,*fuent;
dest=(*d);
fuent=(*f);
temp->codigo=dest->codigo;
strcpy ( temp->marca,dest->marca );
strcpy ( temp->modelo,dest->modelo );
strcpy ( temp->color,dest->color );
dest->codigo=fuent->codigo;
strcpy ( dest->marca,fuent->marca );
strcpy ( dest->modelo,fuent->modelo );
strcpy ( dest->color,fuent->color );
fuent->codigo=temp->codigo;
strcpy ( fuent->marca,temp->marca );
strcpy ( fuent->modelo,temp->modelo );
strcpy ( fuent->color,temp->color );
}
void ordenar( coche **cabeza,int *indx )
{
int i,j;
coche *p,*aux;
p=(*cabeza);
printf("\nElementos en la lista : %i \n",*indx);
for (i=0;i<(*indx)-1;i++)
{
aux=p;
for (j=i+1;j<(*indx);j++)
{
printf("\n[%i][%i]",i,j);
aux=aux->sig;
if (strcmp(p->marca,aux->marca)>0)
{
printf("\ncambio");
copiar(&p,&aux);
}
}
p=p->sig;
}
printf("\nLista Ordenanda .-\n");
system("pause");
}
void menu()
{
system("cls");
printf("\n==============MENU==============");
printf("\n1)Agregar");
printf("\n2)Borrar");
printf("\n3)Buscar");
printf("\n4)Ordenar");
printf("\n5)Mostrar");
printf("\nS)Salir.-");
printf("\n\n\t\tOpcion : ");
}