Foros > C++: Ordenemnar Una Lista

  1. carlossing

    Mensajes [6] - Enviado el Sabado 16 de Junio de 2007 a las 23:28hs

    /*
    Bajo Licencia GPL
    Distribuyase bajo General Public Licence
    http://carlossing.byethost7.com

    Por CarloS Sing Ramos

    [email protected]
    [email protected]

    Los invito a formar parte de cosol-chimbote.org
    cotactenme:

    [email protected]



    */
    #include
    #include
    #include
    #include
    //Definir estructura
    struct paciente { char nombre[20];
    int edad; }; //Definir nodo
    struct nodo { paciente info;
    nodo *sgte; };

    nodo *cola; //Nodo que almacena la 1ra posici?n de la cola
    int menu()
    { int op;
    do { system("cls");

    cout<<"
    http://carlossing.byethost7.com
    " ;
    // <<"http://www.cosol-chimbote.org*
    "
    cout<<"===========================
    ";
    cout<<" MENU RINCIPAL
    ";
    cout<<"===========================
    ";
    cout<<" 1.Registrar Paciente
    ";
    cout<<" 2.Reportar Pacientes
    ";
    cout<<" 3.Numero de Pacientes en espera
    ";
    cout<<" 4.Eliminar Paciente
    ";
    cout<<" 5.Buscar el Menor
    ";
    cout<<" 6.Buscar paciente
    ";
    cout<<" 7.Ordenar
    ";
    cout<<" 8.Salir
    ";
    cout<<"============================
    ";
    cout<<" Opcion : ";
    cin>>op;

    }while (!(op>0 && op<9)); //valida que opci?n este en rango de 1 a 5

    return op;
    }

    void registrar()
    {
    nodo *q,*r;
    system("cls");
    q=new nodo;
    if (q==NULL)
    { cout<<"No existe memoria disponible..!";
    cin.get(); cin.ignore();
    exit(0);
    }
    cout<<"Nombre : "; cin>>q->info.nombre;
    cout<<"Edad : "; cin>>q->info.edad;
    q->sgte = NULL;
    if (cola==NULL)
    cola=q;
    else {
    r=cola;
    while (r->sgte!=NULL)
    r=r->sgte; //Avanza hasta el final de la cola
    r->sgte=q;
    }
    }//Fin Registro

    void reporte() {
    nodo *q;
    system("cls");
    if (cola==NULL){
    cout<<"No existen datos"< cin.get(); cin.ignore();
    return;
    }
    q=cola;
    while (q!=NULL)
    {
    cout<info.nombre<<" "<info.edad< q =q->sgte;
    }
    cin.get(); cin.ignore();
    }//Fin reporte

    void eliminar()
    { nodo *q;
    if (cola==NULL)
    {
    cout<<"No existen elementos en la Pila?endl"; cin.get(); cin.ignore();
    return;
    }
    q=cola;
    if (q->sgte!=NULL)
    cola =q->sgte;
    else
    cola= NULL;
    delete q;
    }//Eliminar


    void cantidad()
    {
    int elem=0;
    nodo *q;
    system("cls");
    if (cola==NULL) return;
    q=cola;
    while (q!=NULL)
    {
    q=q->sgte;
    elem++;
    }
    cout<<"EI Numero de Elementos es : "< }//Fin cantidad

    void liberar()
    { //Esta funcion permite liberar la memoria reservada.
    nodo *q;
    system("cls");
    while (cola!=NULL)
    {
    q =cola->sgte;
    delete cola;
    cola=q;
    }
    }//Fin Libera

    void buskar()
    {
    nodo *q;
    int may=0,min,con;
    char nomb[20];
    system("cls");
    if (cola==NULL){
    cout<<"No existen datos"< cin.get(); cin.ignore();
    return;
    }

    q=cola;
    while (q!=NULL)
    {
    if((q->info.edad)>may)
    { may =(q->info.edad); }
    q =q->sgte;
    }
    //cout< min = may;
    q = cola;
    while (q!=NULL)
    {
    if((q->info.edad) { min =(q->info.edad);
    strcpy(nomb,q->info.nombre); }
    q =q->sgte;
    con++;
    }
    cout<<"La edad minima es: "< cout<<"El Nombre es: "< cin.get(); cin.ignore();
    }//Fin reporte

    void buska_nom()
    {
    nodo *q;
    int may=0,min,con,sw=0;
    char nomb[20];
    system("cls");

    if (cola==NULL){
    cout<<"No existen datos"< cin.get(); cin.ignore();
    return;
    }

    q=cola;
    cout<<"Ingrese el Nombre a Buskar"< gets(nomb);
    cout<<"==============================================="< while (q!=NULL)
    {
    if((strcmp(q->info.nombre,nomb))==0)
    { cout<info.nombre< cout<info.edad;
    sw=1; }
    q =q->sgte;
    }
    if(sw==0)
    {
    cout<<"No se ha encontrado el Nombre"< }

    cin.get(); cin.ignore();

    }
    void ordenar()
    {
    nodo *aux,*x,*z; // Declaro 3 auxiliares
    int i; // Declaro una bandera
    // char auxi[30];
    aux = new nodo; // Reservo Memoria para la variable Auxiliar
    x=cola; // Inicializo el puntero x en el inicio de la cola
    if(x==NULL) // si x = NULL la cola esta vacia
    {
    cout<<"COLA VACIA"< }
    else // Sino
    {
    x=cola; // Reasigno a x el inicio de la Cola por siakaso
    while(x!=NULL) // Empieso a recorrer la cola
    {
    cout<<"1 ";

    z=cola; // Pongo z al inicio de la cola
    while(z!=NULL)
    {
    cout<<"2 ";
    if(z==NULL || x==NULL) // COmparo si ya llegue al final de la cola
    { break; // SI es asi salgo del bucle
    }
    i=strcmp(x->info.nombre,z->info.nombre); // COmparo los valores
    if(i<0) // si i < 0 kiere decir ke x esta antes ke z
    {
    cout<<"* ";
    strcpy(aux->info.nombre,x->info.nombre); // Cambio
    strcpy(x->info.nombre,z->info.nombre); // Cambio
    strcpy(z->info.nombre,aux->info.nombre); // Cambio
    }
    z=z->sgte; // Me voy al siguiente nodo de z
    }
    x=x->sgte; // Me voy al siguiente nodo de x
    }
    }

    aux=cola; // pongo aux al inicio de la cola
    while(aux!=NULL) // Recorro
    {
    cout<<"
    "<info.nombre< aux=aux->sgte;
    }

    // Libero Memoria
    delete aux;
    delete x;
    delete z;


    getch();
    }


    void main(){
    int rpta;
    for(;;)
    {
    rpta = menu();
    switch (rpta)
    {
    case 1: registrar(); break;
    case 2: reporte(); break;
    case 3: cantidad(); break;
    case 4: eliminar(); break;
    case 5: buskar(); break;
    case 6: buska_nom(); break;
    case 7: ordenar(); break;
    case 8: exit(0); break;
    default: liberar(); exit(0); break;
    }
    }
    }


responder

Para poder responder a este tema tenes que ingresar. Si no tenes una cuenta podes registrarse gratis..

publicidad

API DE FACEBOOK
GOOGLE CALENDAR API
GOOGLE MAPS API