Advertisement
rihardmarius

final 7.12.13 - libreria.h

Dec 13th, 2013
392
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.31 KB | None | 0 0
  1. struct nodo1 {
  2.     char valor;
  3.     nodo1* next = nullptr;
  4. };
  5.  
  6. struct nodo2 {
  7.     int grupo;
  8.     nodo2* next = nullptr;
  9.     nodo1* sublista = nullptr;
  10. };
  11.  
  12. struct lista {
  13.     nodo2* root = nullptr;
  14. };
  15.  
  16. struct registro {
  17.     int grupo;
  18.     char valor;
  19. };
  20.  
  21. bool leer_especial (ifstream& input, registro& R)
  22. {
  23.     if (not input.eof())
  24.     {
  25.         input >> R.grupo >> R.valor;
  26.         return true;
  27.     }
  28.     else
  29.         return false;
  30. }
  31.  
  32. nodo2* create_node2 (int a)
  33. {
  34.     nodo2* nuevo = new nodo2;
  35.     nuevo->grupo = a;
  36.     nuevo->next = nullptr;
  37.     return nuevo;
  38. }
  39.  
  40. nodo1* create_node1 (char a)
  41. {
  42.     nodo1* nuevo = new nodo1;
  43.     nuevo->valor = a;
  44.     nuevo->next = nullptr;
  45.     return nuevo;
  46. }
  47.  
  48. void insertar_grupo (lista& l, int grupo)
  49. {
  50.     nodo2* p = l.root;
  51.     nodo2* previous;
  52.     while (p != nullptr and p->grupo != grupo)
  53.     {
  54.         previous = p;
  55.         p = p->next;
  56.     }
  57.     if (p != nullptr and p->grupo == grupo)
  58.         return;
  59.  
  60.     nodo2* nuevo = create_node2(grupo);
  61.     if (l.root == 0)
  62.         l.root = nuevo;
  63.     else if (p == 0)
  64.         previous->next = nuevo;
  65. }
  66.  
  67. void insertar_valor_en_grupo (lista& l, int grupo, char valor)
  68. {
  69.     nodo2* p = l.root;
  70.     while (p != 0 and p->grupo != grupo) // p apunte a algo y no sea el grupo
  71.         p = p->next;
  72.  
  73.     if (l.root == 0 or p == 0) // lista vacia o no encontro grupo
  74.     {
  75.         insertar_grupo(l, grupo);
  76.         insertar_valor_en_grupo(l, grupo, valor);
  77.     }
  78.     else if (p->grupo == grupo)
  79.     {
  80.         if (p->sublista == 0)
  81.         {
  82.             nodo1* nuevo = create_node1(valor);
  83.             p->sublista = nuevo;
  84.             return;
  85.         }
  86.         nodo1* q = p->sublista;
  87.         nodo1* q_ant;
  88.         while (q != nullptr and q->valor != valor)
  89.         {
  90.             q_ant = q;
  91.             q = q->next;
  92.         }
  93.         if (q == 0)
  94.         {
  95.             nodo1* nuevo = create_node1(valor);
  96.             q_ant->next = nuevo;
  97.         }
  98.     }
  99. }
  100.  
  101. void mostrar_lista(lista& l)
  102. {
  103.     nodo2* p = l.root;
  104.     nodo1* q;
  105.     while (p != nullptr)
  106.     {
  107.         cout << p->grupo << '\t';
  108.         q = p->sublista;
  109.         while (q != nullptr)
  110.         {
  111.             cout << q->valor << ' ';
  112.             q = q->next;
  113.         }
  114.         cout << endl;
  115.         p = p->next;
  116.     }
  117. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement