Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: pudge123 en 6 Octubre 2013, 23:49 pm



Título: Lista encadenada
Publicado por: pudge123 en 6 Octubre 2013, 23:49 pm
Buenas Tardes podrían ayudarme a solucionar una tarea.

1) Desarrollar un programa, para crear una lista encadenada con los datos de los alumnos de la clase de computación con forma de estructura: nombre,edad y sexo. Los datos se van introduciendo conforme van llegando los alumnos a la clase, después el maestro quiere acomodar a los alumnos en su clase de tal forma que los primeros alumnos sean del sexo femenino y luego los del sexo masculino.mostrar en la pantalla la lista inicial de los alumnos y la lista ya acomodados.



Título: Re: Lista encadenada
Publicado por: eferion en 7 Octubre 2013, 00:09 am
No me aburro de decirlo. No se hacen tareas.

Si quieres que te haga la tarea, en serio, mándame un mp y negociamos un precio... pero nadie te va a hacer la tarea del "cole" de forma gratuita.

Este foro está para ayudar cuando te atascas... para aprender y consultar dudas... no para librarte de hacer deberes.

Ponte con el programa y, cuando te atasques en alguna función, vuelves y comentas tus problemas... pero el problema desde luego no puede ser el típico "pueden ayudarme a hacer esta tarea?" o "necesito que alguien que haga esta practica" o similares...

Un saludo.


Título: Re: Lista encadenada
Publicado por: pudge123 en 7 Octubre 2013, 00:16 am
Solo me hace falta la funcion de Listar ordenadamente no necesito todo el codigo, me explique mal.

Citar
#include <iostream>
#include <stdlib.h>
#include <string.h>

using namespace std;

struct alumnos {
       char nombre[20];
       int edad;
       char sexo[10];
};
struct Nodo {
 alumnos  info;
 Nodo *siguiente;     
};

Nodo *cabeza, *ptr_actual;

void insertar(){
     
  Nodo *nuevo;
 
  if(cabeza == NULL){
     cabeza = new Nodo;
     cout << "Dame Nombre del Alumno ?  ";
     cin >> cabeza -> info.nombre;
     cout << "Dame Edad del Alumno ?  ";
     cin >> cabeza -> info.edad;
     cout << "Dame Sexo del Alumno?  ";
     cin >> cabeza -> info.sexo;                 
     cabeza -> siguiente = NULL;
     ptr_actual = cabeza;             
  }else{
    nuevo = new Nodo;
     cout << "Dame Nombre del Alumno ?  ";
     cin >> nuevo -> info.nombre;
     cout << "Dame Edad del Alumno ?  ";
     cin >> nuevo -> info.edad;
     cout << "Dame Sexo del Alumno?  ";
     cin >> nuevo -> info.sexo;         
        nuevo -> siguiente = NULL;
        ptr_actual -> siguiente = nuevo;
        ptr_actual = nuevo;             
  }   
     
}

void listar(){
 Nodo *p;
 
 p = cabeza;
 
 while(p != NULL){ 
   cout << p-> info.nombre << "  " <<  p -> info.edad << "  "<< p-> info.sexo<< endl;
   p = p -> siguiente;     
 }           
     
}

int main()
{
    int opc;
    do{
       cout << " Menu Clase de Alumnos" << endl;
       cout << " 1. Insertar " << endl;
       cout << " 2. Listar " << endl;
       cout << " 3. Listar Ordenados " << endl;
       cout << " 4. Salir " << endl;
       cout << " Digite su Opcion ==>  " ;
       cin  >> opc ;
       switch (opc)
       {
              case 1: insertar();
                      break;
              case 2: listar();
                      break;
              case 3: //listarOrdenados();
                      break;
              case 4: cout << " Fin del Programa "  << endl;
                      break;
              default:cout << " Digite una Opcion Valida "  << endl;
       }
    }while(opc != 4);
       
    system("PAUSE");
    return 0;
}


Título: Re: Lista encadenada
Publicado por: pudge123 en 7 Octubre 2013, 01:50 am
Alguien me puede ayudar con el dato que se ingrese en el "sexo" sea primero el femenino?


Título: Re: Lista encadenada
Publicado por: eferion en 7 Octubre 2013, 08:32 am
Lo que tienes que hacer es reordenar la lista y después volver a llamar a "listar".

Reordenar la lista implica cambiar los nodos de orden para que al recorrerla se queden los alumnos con sexo femenino en primer lugar.

Algoritmos de ordenación hay bastantes... unos son mas eficientes en tiempo, otros en recursos, otros son más sencillos de implementar... hay para todos los gustos.

Quizás el más sencillo sea el de la burbuja... tienes bastante documentación en internet sobre algoritmos de ordenamiento, quizás deberías invertir algo de tiempo en echarles un ojo y aprender sobre el tema, ya que ordenar es algo que te va a tocar en bastantes ocasiones.

Básicamente para ordenar lo que tienes que hacer es recorrer la lista e ir aplicando modificaciones en el orden de los nodos para conseguir que la lista final cumpla los requisitos de ordenación pedidos. En el caso que te ocupa, que las alumnas estén primero y los alumnos después.