SdevLab – Exemplo de Código | Como juntar 2 listas em C/C++

Eae galera!

Voltando ao assunto de listas ligadas (se você acompanha o blog pode ver que já venho postando algo sobre listas em C++ já tem um tempo), o post de hoje ensina como juntar duas listas.

Como juntar 2 listas em C/C++

Em resumo este código junta duas listas. A historinha desta vez é a seguinte, deseja-se fazer a lista de chamadas de uma sala, para isto primeiro são adicionados os nomes de todos os meninos da sala, e logo após o de todas meninas.

Os nomes dos meninos ficam armazenados em uma lista e o das meninas em outra. O código junta estas duas listas e forma a lista de chamadas geral da sala.

Segue o código:

#include <iostream>
using namespace std;
struct no
{
char nome[200];
int matricula;
no* next;
};
typedef no* noptr;
void pushMeninos (noptr &s, int t, char a[])
{
no *p;
p = new no;
p->matricula = t;
strcpy(p->nome,a);
if (s == NULL)
p->next=NULL;
else
p->next = s;
s=p;
};
void pushMeninas (noptr &s, int g, char b[])
{
no *p;
p = new no;
p->matricula = g;
strcpy(p->nome,b);
if (s == NULL)
p->next=NULL;
else
p->next = s;
s=p;
};
void pop (noptr &lista, int &matricula, char nomeA[])
{
no *p;
if (lista == NULL)
cout << "Lista vazia";
else
{
p=lista;
lista = p-> next;
matricula = p-> matricula;
strcpy(nomeA,p-> nome);
delete p;
}
};
void juntaListas (noptr &lista, noptr &lista2)
{
no *p;
no *q;
p = lista;
q = lista2;
while (p->next != NULL)
{
p = p-> next;
}
p->next = q;
};
int main()
{
noptr lista2 = NULL;
noptr lista = NULL;
char nome[200];
int matricula;
char nome2[200];
int matricula2;
cout << "Acrescentando os meninos da sala" << endl;
cout <<"Entre com o número da matricula (-1 para sair)" << endl;
cin >> matricula;
while (matricula != -1)
{
cout << "Entre com o nome do aluno" << endl;
cin.ignore();
cin.getline(nome,200);
pushMeninos(lista,matricula,nome);
cout <<"Entre com o número da matricula (-1 para sair)" << endl;
cin >> matricula;
}
cout << "Agora vamos acrescentar as meninas da sala." << endl;
cout <<"Entre com o número da matricula (-1 para sair)" << endl;
cin >> matricula2;
while (matricula2 != -1)
{
cout << "Entre com o nome do aluno" << endl;
cin.ignore();
cin.getline(nome2,200);
pushMeninas(lista2,matricula2,nome2);
cout <<"Entre com o número da matricula (-1 para sair)" << endl;
cin >> matricula2;
}
juntaListas(lista,lista2);
cout << "A lista de chamada da sala é:" << endl;
while (lista != NULL)
{
pop(lista, matricula, nome);
cout << nome << " " << matricula << endl;
}
return 0;
}

Até a próxima!
😉

Anúncios

Deixe um comentário

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s