elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Listas Enlazadas Simples Metodos de ordenamiento
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Listas Enlazadas Simples Metodos de ordenamiento  (Leído 8,368 veces)
david.albornoz

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Listas Enlazadas Simples Metodos de ordenamiento
« en: 14 Octubre 2018, 06:34 am »

/*Quisiera encontrador un metodos mas eficiente de usar los algoritmos conocidos en las listas enlazadas simples, por ejemplo la busqueda binaria.
En el codigo implemente insercion y seleccion pero creo que pueden ser mas eficiente.
*/
#include <iostream>
#include <conio.h>
#include <stdlib.h>

using namespace std;

struct Nodo{
       int valor;       
       struct Nodo *sgte;
};

typedef struct Nodo *Tlista;

Tlista Inicio, Fin;

void generarLista( Tlista &Inicio, Tlista &Fin, int valor ) {
     Tlista q, t;
     
         q = new(struct Nodo);
         q->valor = valor;
         
         if(Inicio==NULL){
              q->sgte = Inicio;
              Inicio  = q;
              Fin     = q;         
         }
         else{
              q->sgte   = Fin->sgte;
              Fin->sgte = q;
              Fin       = q;
         }

}

void reportarLista(Tlista Inicio){
     while(Inicio != NULL){
          cout <<"  " << Inicio->valor ;
          Inicio = Inicio->sgte;
     }
}

void ordenarLista(Tlista lista){
     Tlista actual , siguiente;
     int t;
     
     actual = lista;
     while(actual->sgte != NULL)
     {
          siguiente = actual->sgte;
         
          while(siguiente!=NULL)
          {
               if(actual->valor > siguiente->valor)
               {
                    t = siguiente->valor;
                    siguiente->valor = actual->valor;
                    actual->valor = t;         
               }
               siguiente = siguiente->sgte;                   
          }   
          actual = actual->sgte;
          siguiente = actual->sgte;
           
     }
     
     cout<<"\n\n\tLista ordenada..."<<endl;
}
void ordenamientoSeleccion(Tlista lista){
   Tlista actual, siguiente;   int t;
   actual = lista; int minimo;
   Tlista min=lista;
   
   while(actual->sgte!=NULL){
      minimo=actual->valor;
      min=actual;
      siguiente=actual->sgte;
      
      while(siguiente!=NULL){
         
         if(siguiente->valor < minimo){
         minimo = siguiente->valor;
         min = siguiente;
         }
         
         siguiente=siguiente->sgte;      
      }
      
      t= actual->valor;
      actual->valor=min->valor;
      min->valor=t;
      
      actual=actual->sgte;
      
   }
   
    cout<<"\n\n\tLista ordenada..."<<endl;
   
}

void ordenamientoInsercion(Tlista lista){
   Tlista actual;
   actual = lista; int cont=1,cursor,aux,k;
   
   while(actual!=NULL){
      cursor=cont;       cout<<"\ncursor:"<<cursor<<" ";
      aux=actual->valor;    cout<<"\naux:"<< aux<<" ";
      k = cursor-1;       cout<<"\nk: "<< k<<" ";
      Tlista anterior=lista;
      for(int f=0;f<k-1;f++){
         anterior=anterior->sgte;
      }
                     cout<<"\nAnterior: "<<anterior->valor <<" ";
      while(k>=0 && aux<anterior->valor){
         anterior->sgte->valor=anterior->valor;
         Tlista temp=lista;
         for(int j=0;j<k-2;j++){
            temp=temp->sgte;
         }   
                     cout<<"\nTemp:"<<temp->valor;         
         anterior=temp   ;   
         k--;   
      }
                     cout<<"\n--"<<aux<<endl;
      Tlista temp2 = lista;
      for(int h=0;h<k;h++){
      temp2=temp2->sgte;   
      }
      temp2->valor=aux;
      actual=actual->sgte;
      cont++;   
   }
   cout<<"\n\n\tLista ordenada..."<<endl;
}



void menu()
{
    cout<<"\n\t\tORDENAMIENTO DE UNA LISTA ENLAZADA\n\n";
    cout<<" 1. INGRESAR NUMERO\n";
    cout<<" 2. MOSTRAR NUMEROS\n";
    cout<<" 3. BURBUJA\n";
    cout<<" 4. SELECCION\n";
    cout<<" 5. INSERCION\n";

    cout<<" 0. SALIR\n";
    cout<<" INGRESE OPCION: ";
}

int main()
{
    Inicio = NULL;
    Fin    = NULL;
   
    int op;     
    int num;   
    generarLista( Inicio, Fin, 2 );
    generarLista( Inicio, Fin, 5 );
    generarLista( Inicio, Fin, 3 );
    generarLista( Inicio, Fin, 6 );
    generarLista( Inicio, Fin, 1 );
   
    do
    {
        menu();  cin>> op;
        switch(op)
        {     
            case 1: system("cls");
                 cout<< "\n Valor: "; cin>> num;
                 generarLista( Inicio, Fin, num );
                 reportarLista( Inicio );
            break;

            case 2: system("cls");
                 cout<<"\n\n LISTA:\n\n";
                 reportarLista( Inicio );
            break;
           
            case 3: system("cls");
                 ordenarLista( Inicio );break;
                 
            case 4: system("cls");
             ordenamientoSeleccion(Inicio);break;     
            case 5: system("cls");
            ordenamientoInsercion(Inicio);reportarLista( Inicio );break;   
            default: 
            break;           

        }

        cout<<endl<<endl;

    }while(op!=0);
}


En línea

Beginner Web


Desconectado Desconectado

Mensajes: 634


youtu.be/0YhflLRE-DA


Ver Perfil
Re: Listas Enlazadas Simples Metodos de ordenamiento
« Respuesta #1 en: 14 Octubre 2018, 09:14 am »

Sii quieres usar busqueda binaria en listas debes recordar que la busqueda binaria funciona solamente en estructuras lineales ordenados, en listas podrias utilizar una clave para señalar el orden, luego ordenarlas con bubblesort en caso de haberlas insertado desordenadamente y recien hacerle una busqueda binaria a esa lista


En línea

7w7
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Metodos de Ordenamiento en c#
.NET (C#, VB.NET, ASP)
alexvem 0 38,807 Último mensaje 4 Agosto 2008, 18:02 pm
por alexvem
listas enlazadas simples en c++(soy novato)
Programación C/C++
pein 1 3,877 Último mensaje 9 Octubre 2010, 03:25 am
por Littlehorse
listas enlazadas simples
Programación C/C++
dmon1 8 3,416 Último mensaje 15 Abril 2015, 05:00 am
por dmon1
Algoritmo de ordenamiento para listas enlazadas [C]
Programación C/C++
Rhessus 5 8,751 Último mensaje 18 Julio 2016, 06:39 am
por Rhessus
Dudas sobre el ordenamiento burbuja en listas simples
Programación C/C++
Beginner Web 2 1,851 Último mensaje 12 Diciembre 2018, 05:52 am
por Beginner Web
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines