Buenas gente, tego que hacer un programa que muestre ordenada una lista de numeros enteros. Muchas gracias, Un saludo.
/* Programa que meta ordenados los numeros a una lista */
#include<stdio.h>
#include<stdlib.h>
struct nodo{
int numero;
struct nodo *siguiente;
};
int main(void){
void IntroducirOrden(struct nodo *primero, int num);
void Mostrar(struct nodo*primero);
struct nodo *primero;
primero=NULL;
int opcion;
int num;
do{
printf("MENU.n");
printf("1.-Introducir Numero.n");
printf("2.-Mostrar lista.n");
printf("3.-Salir.n");
printf("OPCION:");
scanf("%d",&opcion);
switch(opcion){
case 1:
printf("Introduzca un numero:");
scanf("%d",&num);
system("cls");
IntroducirOrden(primero,num);
break;
case 2:
Mostrar(primero);
break;
case 3:
break;
default :
printf("Opcion Incorrecta.n ");
break;
}/*switch */
}while(opcion!=3);
}/*main */
void IntroducirOrden(struct nodo *primero, int num){
struct nodo *nuevo;
struct nodo *anterior;
struct nodo *actual;
/* Busoc la posicion en la que debo insertar el nodo */
anterior=actual=primero;
while((actual!=NULL)&&(actual->numero<num)){
anterior=actual;
actual=actual->siguiente;
}
/* Creo el nodo */
nuevo=(struct nodo*)malloc(sizeof(struct nodo));
nuevo->numero=num;
/* Ajusto los punteros */
if((actual==NULL)||(anterior=actual)){ /* Inserto al principio */
nuevo->siguiente=anterior;
primero=nuevo;
}else{ /* Inserto entre medias o al final */
nuevo->siguiente=actual;
anterior->siguiente=nuevo;
}
}
void Mostrar(struct nodo*primero){
struct nodo *auxiliar;
auxiliar=primero;
while(auxiliar!=NULL){
printf("%d",auxiliar->numero);
auxiliar=auxiliar->siguiente;
}
}