Se tiene una lista de simple enlace, el campo dato son objetos Alumno con las variables: nombre, edad, sexo. Escribir una función para transformar la lista de tal forma que si el primer nodo es de un alumno de sexo masculino el siguiente sea de sexo femenino, así alternativamente, siempre que sea posible, masculino y femenino.
Este es el codigo que tengo solo me falta ordenarlo por sexo.
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
struct nodo_alumno{
string nombre;
int edad;
int sexo;
nodo_alumno *sgte;
};
typedef struct nodo_alumno *alumno;
nodo_alumno *anterior;
void insertar_alumno(alumno &alum, string nom, int ed, int sex);
void mostrar_lista(alumno &alum, int sex);
void menu(){
cout<<"\t\tIngrese la opcion a ejecutar : "<<endl;
cout<<"\t\t\t\t1) Insertar Nodo"<<endl;
cout<<"\t\t\t\t2) Mostrar Lista"<<endl;
cout<<"\t\t\t\t3) Mostrar Lista ORDENADA"<<endl;
cout<<"\t\t\t\t4) Salir"<<endl;
}
void insertar_alumno(alumno &alum, string nom, int ed, int sex){
alumno alumn;
alumn = new (nodo_alumno);
alumn->nombre = nom;
alumn->edad = ed;
alumn->sexo = sex;
alumn->sgte = alum;
alum = alumn;
}
void mostrar_lista(alumno &alum, int sex){
alumno alumn = new (nodo_alumno);
alumno n_alumn = new (nodo_alumno);
int cont = 0;
int sexo;
while(alum!=NULL){
if(alum->sexo==1){
cout<<""<<' '<<cont+1<<"- "<<alum->nombre<<" Edad: "<<alum->edad<<" Sexo: "<<" Femenino"<<endl;
alum = alum->sgte;
cont++;
}
else if (alum->sexo==2)
{
cout<<""<<' '<<cont+1<<"- "<<alum->nombre<<" Edad: "<<alum->edad<<" Sexo: "<<" Masculino"<<endl;
alum = alum->sgte;
cont++;
}
}
}
int main(){
alumno al= NULL;
int opc;
string nomb;
int anio;
int sex;
do{
menu();
cin>>opc;
switch(opc){
case 1:
cout<<"Nombre: ";
cin>>nomb;
cout<<"Edad.: ";
cin>>anio;
cout<<"Sexo (1-F 2-M): "<<endl;
cin>>sex;
if((sex!=1)&&(sex!=2))
{
cout<<"\nEl sexo Debe Ser Igual a F o M"<<endl;
cout<<"Sexo.: ";
cin>>sex;
}
else
insertar_alumno(al,nomb,anio,sex);
break;
case 2:
cout<<"--------------------------------------------------------"<<endl;
mostrar_lista(al,sex);
break;
case 3:
break;
}
cout<<endl<<endl;
system("pause");
}
while(opc!=4);
return 0;
}