Buscar

Lista Encadeada - Alocação Dinâmica básica

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

#include <iostream>
#include <cstdlib>
#include <cstring>
#include <iomanip>
using namespace std;
struct cadastro{ // Inicialização da struct cadastro
 char nome[31];
 long cpf;
 struct cadastro *prox; // Inicialização do ponteiro do tipo da struct cadastro
};
void pausa(); // Função de compatibilidade para Linux já que este não possui system('pause'), uma vez que não necessita
void limpaTela(); // Função de compatibilidade entre o system('clear') no Linux e o system('cls') no Windows
void cadQnt();
void cadInserir();
void cadExibir();
void cadRemover();
cadastro *insereFrente(cadastro *ptr, char nomep[31], long cpfp);
cadastro *lista = NULL, *ini, *aux; int n;
int main(){
 int op,n,x,f1,f2,f3;
 f1=f2=f3=0;
 do{
 limpaTela();
 cout<<"\n\n~ ~ ~ Alocação dinâmica ~ ~ ~";
 cout<<"\n~ ~";
 cout<<"\n~ 1 - Quantidade de clientes a cadastrar ~";
 cout<<"\n~ 2 - Inserir dados de clientes ~";
 cout<<"\n~ 3 - Exibir ~";
 cout<<"\n~ 4 - Remover ~";
 cout<<"\n~ 5 - Sair ~";
 cout<<"\n~ Opção: ~";
 cout<<"\n~ ~";
 cout<<"\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n";
 cin>>op;
 cin.get();
 limpaTela();
 switch(op){
 case 1: cadQnt(); // Chamada da função "cadQnt()"
 f1=1;
 break;
 case 2: if(f1==1){
 cadInserir(); // Chamada da função "cadInserir()"
 f2=1;
 }else
 cout<<"\nVocê não determinou a quantidade de clientes\n";
 break;
 case 3: if(f2==1){
 cadExibir(); // Chamada da função "cadExibir()"
 f3=1;
 }else cout<<"\nVocê pulou alguma(s) etapa(s)\n";
 break;
 case 4: if(f3==1){
 cadRemover(); // Chamada da função "cadRemover()"
 }else cout<<"\nVocê pulou alguma(s) etapa(s)\n";
 break;
 case 5: cout<<"\nFim da alocação dinâmica\n";
 // Liberando
 delete lista; lista=0;
 break;
 default:cout<<"\nOpção Inválida\n";
 }
 cout<<"\n\n";
 pausa();
 }while(op!=5);
 return 0;
}
void cadQnt(){
 cout<<"\nEntre com a quantidade de clientes para cadastrar: ";cin>>n;cin.get();
}
// Inserir clientes na lista
void cadInserir(){
 char nomep[31]; long cpfp;
 for(int i=0; i<n; i++){
 cout<<"\n\nDigite o nome: "; cin.getline(nomep,31); // Armazena o conteúdo na var "nomep"
 cout<<"\nDigite o CPF: "; cin>>cpfp; // Armazena o conteúdo na var "cpfp"
 cin.get(); // Limpa o buffer do teclado
 lista = insereFrente(lista, nomep, cpfp); // Passagem dos valores para a função "insereFrente" responsável pela adição de ponteiros
 }
}
// Função / ponteiro "insereFrente"
cadastro *insereFrente(cadastro *ptr, char nomep[31], long cpfp){
 cadastro *temp = new cadastro; // Declaração do novo ponteiro "temp" de tipo nodo
 strcpy(temp->nome, nomep); // Copia o conteúdo da var "nomep" para o membro "nome" do ponteiro "temp"
 temp->cpf=cpfp; // Copia o conteúdo da var "cpfp" para o membro "nome" do ponteiro "cpf"
 temp->prox=ptr; // Instancia o membro "prox" do ponteiro "temp" com o conteúdo que veio pelo parâmetro "ptr"
 lista = temp; // Copia o conteúdo do ponteiro "temp" para o ponteiro lista
 ini=lista; // Guarda o início (Copia o conteúdo do ponteiro "lista" para o ponteiro "ini")
 return temp; // Retorna o ponteiro "temp"
}
// Exibir a lista de clientes
void cadExibir(){
 cout<<"\n\nLista de clientes:\n";
 cout<<"Nome"<<setw(19)<<"CPF";
 while(lista){
 int formt = 31-strlen(lista->nome); // seta o tamanho a ser usado no "setw" abaixo
 cout<<"\n"<<lista->nome<<setw(formt)<<lista->cpf; // exibe os membros do ponteiro
 lista=lista->prox; // passa para a próxima lista
 }
}
// Remover o primeiro cliente
void cadRemover(){
 if(n>1){
 lista=ini; // Volta ao início
 aux = lista; // Copia o 1º para aux
 lista = lista->prox; // Move a lista para o próximo
 delete aux; // Deleta aux
 n--;
 }else
 cout<<"\nNão é possível remover\n\n";
}
// Função pausa Windows/Linux
void pausa(){
 #ifdef WIN32
 system("pause");
 #else
 system("read -p \"Pressione enter para continuar\" saindo");
 #endif // WIN32
}
// Função limpaTela Windows/Linux
void limpaTela(){
 #ifdef WIN32
 system("cls");
 #else
 system("clear");
 #endif // WIN32
}

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Outros materiais