Advertisement
rihardmarius

ordenar lista

Nov 23rd, 2013
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.50 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. struct node {
  5.   int entry = 0; // valores por defecto
  6.   node *next = nullptr;
  7. };
  8. struct lista {
  9.     node* root = nullptr;
  10. };
  11.  
  12. void mostrar_lista (lista& l);
  13. bool is_vacia (lista &l);
  14. void mostrar_vacia (lista& l);
  15. int get_by_index (lista& l, int index);
  16. void insertar_nodo_al_final (lista &l, int a);
  17. void insertar_nodo_en_index(lista& l, int index, int valor);
  18. void eliminar_nodo_en_index (lista& l, int index);
  19. void eliminar_lista (lista& l);
  20. int buscar_elemento (lista& l, int e);
  21.  
  22. void swap_entries (node*& a, node*& b)
  23. {
  24.     int aux = a->entry;
  25.     a->entry = b->entry;
  26.     b->entry = aux;
  27. }
  28.  
  29. void ordenar_lista (lista& a)
  30. {
  31.     node* p = a.root;
  32.     node* q = a.root;
  33.  
  34.     while (p != 0)
  35.     {
  36.         q = q->next;
  37.         while (q != 0)
  38.         {
  39.             if (p->entry > q->entry)
  40.                 swap_entries (p,q);
  41.             q = q->next;
  42.         }
  43.         p = p->next;
  44.         q = p;
  45.     }
  46. }
  47.  
  48. int main()
  49. {
  50.     lista L;
  51.  
  52.     insertar_nodo_al_final (L, 1);
  53.     insertar_nodo_al_final (L, 4);
  54.     insertar_nodo_al_final (L, 7);
  55.     insertar_nodo_al_final (L, 2);
  56.     insertar_nodo_al_final (L, 5);
  57.     insertar_nodo_al_final (L, 8);
  58.     insertar_nodo_al_final (L, 3);
  59.     insertar_nodo_al_final (L, 6);
  60.     insertar_nodo_al_final (L, 9);
  61.  
  62.     mostrar_lista (L);
  63.  
  64.     ordenar_lista(L);
  65.  
  66.     mostrar_lista (L);
  67.  
  68.     return 0;
  69. }
  70.  
  71. void mostrar_lista (lista& l) // funciona
  72. {
  73.     for (node *p = l.root; p != 0; p = p->next)
  74.         cout << p->entry << ' ';
  75.     cout << endl;
  76. }
  77.  
  78. bool is_vacia (lista &l) // funciona
  79. {
  80.     return l.root == 0;
  81. }
  82.  
  83. void mostrar_vacia (lista& l) // funciona
  84. {
  85.     if (is_vacia(l))
  86.         cout << "esta vacia" << endl;
  87.     else
  88.         cout << "no esta vacia" << endl;
  89. }
  90.  
  91. int get_by_index (lista& l, int index) // funciona
  92. {
  93.     node* p = l.root;
  94.     for (int i=0; i < index; i++)
  95.     {
  96.         p = p->next;
  97.     }
  98.     return p->entry;
  99. }
  100.  
  101. void insertar_nodo_al_final (lista &l, int a) // funciona
  102. {
  103.     node* nuevo = new node;
  104.     nuevo->entry = a;
  105.     if (l.root != 0) // apunta a algo?
  106.     {
  107.         node* p = l.root;
  108.         while (p->next != 0)
  109.             p = p->next;
  110.         p->next = nuevo;
  111.     }
  112.     else
  113.         l.root = nuevo;
  114. }
  115.  
  116. void insertar_nodo_en_index(lista& l, int index, int valor) // funciona
  117. {
  118.     node* nuevo = new node;
  119.     nuevo->entry = valor;
  120.  
  121.     if (index != 0)
  122.     {
  123.         node* p = l.root;
  124.         for (int i = 0; i < index - 1; i++)
  125.         {
  126.             p = p->next;
  127.         }
  128.         nuevo->next = p->next;
  129.         p->next = nuevo;
  130.     }
  131.     else
  132.     {
  133.         nuevo->next = l.root;
  134.         l.root = nuevo;
  135.     }
  136. }
  137.  
  138. void eliminar_nodo_en_index (lista& l, int index) // funciona
  139. {
  140.     node* p = l.root;
  141.     if (index != 0)
  142.     {
  143.         node* q = l.root;
  144.         for (int i = 0; i < index - 1; i++)
  145.         {
  146.             p = p->next;
  147.         }
  148.         q = p->next->next;
  149.         delete p->next;
  150.         p->next = q;
  151.     }
  152.     else
  153.     {
  154.         l.root = p->next;
  155.         delete p;
  156.     }
  157. }
  158.  
  159. void eliminar_lista (lista& l) // funciona
  160. {
  161.     while (l.root != 0)
  162.         eliminar_nodo_en_index(l,0);
  163. }
  164.  
  165. int buscar_elemento (lista& l, int e) // funciona
  166. {
  167.     int index = 0;
  168.     node* p = l.root;
  169.     while (p->entry != e and p->next != 0) // p->next == 0  => es el ultimo
  170.     {
  171.         p = p->next;
  172.         index++;
  173.     }
  174.  
  175.     if (p->entry == e)
  176.         return index;
  177.     else
  178.         return -1;
  179. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement