SdevLab – Exemplo de Código | Manipulação de Listas – Delafter e Remove tudo C/C++

Eae galera!

Agora que já vimos o básico da montagem de lista, vamos ver um código como exemplo de código que manipula listas.

Manipulação de Listas – Delafter e Remove tudo C/C++

O código abaixo trabalha com as funções delafter (remove o próximo registro depois de uma dada referência) e a remove tudo que limpa uma lista.

Segue o código:

#include <iostream>
using namespace std;
struct no
{
int info;
no* next;
};
typedef no* noptr;
void push (noptr &s, int t)
{
no *p;
p = new no;
p->info = t;
if (s == NULL)
p->next=NULL;
else
p->next = s;
s=p;
};
void delafter(noptr &p, int &x)
{
noptr q;
q = p->next;
x = q->info;
p->next = q->next;
delete q;
}
int pop (noptr &lista)
{
int q;
no *p;
if (lista == NULL)
cout << "Lista vazia";
else
{
p=lista;
lista = p->next;
q = p->info;
delete p;
}
return q;
};
void removetudo(noptr &lista, int x)
{
noptr p,q;
int aux;
q = NULL;
p = lista;
while(p != NULL)
{
if (p->info == x)
if (q == NULL) // remove o primeiro da lista
{
aux = pop(lista);
p = lista;
}
else
{
p = p->next;
delafter(q,aux);
}
else // continua atravessando a lista
{
q = p;
p = p->next;
}
}
}
int main()
{
noptr lista = NULL;
int informacao;
int auxtel;
cout <<"Entre com o número do telefone (-1 para sair)" << endl;
cin >> informacao;
while (informacao != -1)
{
push(lista, informacao);
cout <<"Entre com o número do telefone (-1 para sair)" << endl;
cin >> informacao;
}
cout << "Digite o telefone que você deseja remover." << endl;
cin >> auxtel;
removetudo(lista, auxtel);
cout << "Sua nova lista é: " << endl;
while (lista != NULL)
{
informacao=pop(lista);
cout << informacao << endl;
}
return 0;
}

Até a próxima!

😉

SdevLab – Exemplo de Código | Filas FIFO em C/C++

Eae galera!

Continuando no tema C/C++ o assunto agora não é mais lista, e sim filas. Desta vez veremos como manipular uma fila FIFO, First In, First Out. Ou seja, o primeiro a entrar na fila é também o primeiro a sair (como nas filas de banco, médico, etc).

Filas FIFO em C/C++

O código abaixo cadastra pacientes que deverão fazer uma consulta com um médico. Ele armazena os dados dos pacientes e depois monta a ordem da consulta, que é a ordem dos cadastros (first in first out).

Para esta idéia funcionar a única coisa que foi feita e difere dos outros códigos é a estrutura fila, que armazena os dados da consulta (início e fim).

Segue o código:

#include <iostream>
#include <cstring>
using namespace std;
struct no
{
char nome[200];
no* next;
};
typedef no* noptr;
struct fila
{
noptr inicio;
noptr fim;
};
void insere (fila* pq, char x[])
{
noptr p;
p = new no;
strcpy(p->nome,x);
p->next = NULL;
if (pq->fim == NULL)
pq->inicio = p;
else
(pq->fim)->next = p;
pq->fim = p;
}
void remove (fila* pq, char x[])
{
noptr p;
//verificando se a fila esta vazia
if(pq->inicio == NULL)
{
cout << "Sua fila está vazia." << endl;
exit(1);
}
//removendo nó do ini­cio da fila
p = pq->inicio;
strcpy(x,p->nome);
pq->inicio = p->next;
//para fila vazia, os dois ponteiros apontam para NULL
if (pq->inicio == NULL)
pq->fim = NULL;
delete p;
}
int main()
{
fila q;
char name[200];
//inicializando a fila
q.inicio = NULL;
q.fim = NULL;
//inserindo elementos na fila
cout << "Entre com o nome do paciente (Digite n para sair)" << endl;
cin.getline(name,200);
while(strcmp(name,"n"))
{
insere(&q,name);
cout << "Entre com o nome do paciente (Digite n para sair)" << endl;
cin.getline(name,200);
}
//removendo os pacientes da fila
cout << endl;
cout << "A ordem de atendimento sera: " << endl;
while (q.fim != NULL)
{
remove(&q,name);
cout << name << endl;
}
system("Pause");
return 0;
}

Até a próxima!

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!
😉

SdevLab – Exemplo de Código | Listas ligadas & Push Pop em C/C++

Eae galera!

Mais um post sobre Listas ligadas em C/C++!

Listas ligadas & Push Pop em C/C++

Este código é bastante parecido com o de listas ligadas que tem aqui no blog, com a diferença que agora a função conta foi implementada e vai contar quantos contatos existem na lista do usuário. A função pop chamada logo após a conta exibe estes contatos.

#include <iostream>
using namespace std;
struct no
{
char nome[200];
int tel;
no* next;
};
typedef no* noptr;
void push (noptr &s, int t, char a[])
{
no *p;
p = new no;
p->tel = t;
strcpy(p->nome,a);
if (s == NULL)
p->next=NULL;
else
p->next = s;
s=p;
};
void pop (noptr &lista, int &tele, char nomeA[])
{
no *p;
if (lista == NULL)
cout << "Lista vazia";
else
{
p=lista;
lista = p-> next;
tele = p-> tel;
strcpy(nomeA,p-> nome);
//cout << nomeA << " " <<tele << endl;
delete p;
}
};
void conta (noptr &lista)
{
no *p;
int cont = 0;
p = lista;
while (p != NULL)
{
cont++;
p = p-> next;
}
cout << "Você tem " << cont << " contatos na sua lista" << endl;
};
int main()
{
noptr lista = NULL;
char nome[200];
int tel;
cout <<"Entre com o número do telefone (-1 para sair)" << endl;
cin >> tel;
while (tel != -1)
{
cout << "Entre com o nome do contato" << endl;
cin.ignore();
cin.getline(nome,200);
push(lista,tel,nome);
cout <<"Entre com o número do telefone (-1 para sair)" << endl;
cin >> tel;
}
conta (lista);
cout << "Os contatos adicionados à  lista são: " << endl;
while (lista != NULL)
{
pop(lista, tel, nome);
cout << nome << " " << tel << endl;
}
return 0;
}

Até a próxima!
😉