Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- struct nodo1 {
- char valor;
- nodo1* next = nullptr;
- };
- struct nodo2 {
- int grupo;
- nodo2* next = nullptr;
- nodo1* sublista = nullptr;
- };
- struct lista {
- nodo2* root = nullptr;
- };
- struct registro {
- int grupo;
- char valor;
- };
- bool leer_especial (ifstream& input, registro& R)
- {
- if (not input.eof())
- {
- input >> R.grupo >> R.valor;
- return true;
- }
- else
- return false;
- }
- nodo2* create_node2 (int a)
- {
- nodo2* nuevo = new nodo2;
- nuevo->grupo = a;
- nuevo->next = nullptr;
- return nuevo;
- }
- nodo1* create_node1 (char a)
- {
- nodo1* nuevo = new nodo1;
- nuevo->valor = a;
- nuevo->next = nullptr;
- return nuevo;
- }
- void insertar_grupo (lista& l, int grupo)
- {
- nodo2* p = l.root;
- nodo2* previous;
- while (p != nullptr and p->grupo != grupo)
- {
- previous = p;
- p = p->next;
- }
- if (p != nullptr and p->grupo == grupo)
- return;
- nodo2* nuevo = create_node2(grupo);
- if (l.root == 0)
- l.root = nuevo;
- else if (p == 0)
- previous->next = nuevo;
- }
- void insertar_valor_en_grupo (lista& l, int grupo, char valor)
- {
- nodo2* p = l.root;
- while (p != 0 and p->grupo != grupo) // p apunte a algo y no sea el grupo
- p = p->next;
- if (l.root == 0 or p == 0) // lista vacia o no encontro grupo
- {
- insertar_grupo(l, grupo);
- insertar_valor_en_grupo(l, grupo, valor);
- }
- else if (p->grupo == grupo)
- {
- if (p->sublista == 0)
- {
- nodo1* nuevo = create_node1(valor);
- p->sublista = nuevo;
- return;
- }
- nodo1* q = p->sublista;
- nodo1* q_ant;
- while (q != nullptr and q->valor != valor)
- {
- q_ant = q;
- q = q->next;
- }
- if (q == 0)
- {
- nodo1* nuevo = create_node1(valor);
- q_ant->next = nuevo;
- }
- }
- }
- void mostrar_lista(lista& l)
- {
- nodo2* p = l.root;
- nodo1* q;
- while (p != nullptr)
- {
- cout << p->grupo << '\t';
- q = p->sublista;
- while (q != nullptr)
- {
- cout << q->valor << ' ';
- q = q->next;
- }
- cout << endl;
- p = p->next;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement