Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original
//ListaDuplamenteEncadeadaBasica.cpp
#include <iostream>
#include <cstdlib>
using namespace std;
struct listaDE
{
int info;
struct listaDE* ant;
struct listaDE* prox;
};
//Protótipos
listaDE *insere(listaDE *LISTA, int valor);
void exibe(listaDE *LISTA);
listaDE *remove(listaDE *LISTA, int valor);
listaDE *busca (listaDE *LISTA, int valor);
int contaNos(listaDE *LISTA);
void libera(listaDE *LISTA);
//Programa principal
int main()
{
int op, valor;
//inicializa a lista duplamente encadeada
struct listaDE *lista= NULL;
do
{
system("cls");
system("color 2f");
cout<<"\n\n( () ) Alocacao Dinamica ( () )";
cout<<"\n( )";
cout<<"\n( 1- Insere na 1a posicao )";
cout<<"\n( 2- Remove da Lista DE )";
cout<<"\n( 3- Exibe a Lista DE )";
cout<<"\n( 4- Conta Nos da Lista DE )";
cout<<"\n( 5- Libera a Lista DE )";
cout<<"\n( 6- Sai )";
cout<<"\n( Opcao: )";
cout<<"\n( )";
cout<<"\n( ( ) ) ( ( ) ) ( ( ) ) ( ( ) )\n";
cin>>op;
system("cls");
system("color f2");
switch(op)
{
case 1:cout<<"\nDigite valor a ser inserido: ";
cin>>valor;
lista = insere(lista, valor);
break;
case 2:if(!lista)
cout << "\n\nNada a remover. Lista vazia\n";
else
{
cout<<"\nDigite valor a ser removido: ";
cin>>valor;
lista=remove(lista, valor);
}
break;
case 3: if(!lista)
cout << "\n\nLista vazia\n";
else
exibe(lista);
break;
case 4:if(!lista)
cout << "\n\nLista vazia\n";
else
cout<<"\nTotal de nos: "<< contaNos(lista);
break;
case 5: if(lista)
cout<<"\nTem elementos na Lista\n";
else
{
libera(lista);
cout<<"\nLiberando Memoria";
}
break;
case 6: cout<<"Fechando Lista Duplamente Encadedada\n";
break;
default:cout<<"\nOpcao Invalida\n";
}
cout<<"\n\n";
system("pause");
} while(op !=6);
return 0;
}
// insere no início
listaDE *insere(listaDE *LISTA, int valor)
{
listaDE* novo = new listaDE;
novo->info = valor;
novo->prox = LISTA;
novo->ant = NULL;
if (LISTA)
{
LISTA->ant = novo;
}
return novo;
}
// exibe lista
void exibe(listaDE *LISTA)
{
listaDE* ptr;
for (ptr=LISTA; ptr != NULL; ptr=ptr->prox)
cout<<"\n"<<ptr->info;
}
// remove um elemento da lista
listaDE *remove(listaDE* LISTA, int valor)
{
listaDE *p = busca(LISTA,valor);
if (!p)
{
cout<< "\nValor nao achado\n";
return LISTA;
} // nao achou o elemento
// retira elemento do encadeamento
if (LISTA == p)
LISTA = p->prox;
else
p->ant->prox = p->prox;
if (p->prox )
p->prox->ant = p->ant;
cout<<"\nValor removido\n";
delete p;
return LISTA;
}
// busca valor na lista
listaDE *busca (listaDE *LISTA, int valor)
{
listaDE *ptr;
for (ptr=LISTA; ptr != NULL; ptr=ptr->prox)
if (ptr->info == valor)
return ptr;
return NULL; // nao achou o elemento
}
//conta nós da Lista
int contaNos(listaDE *LISTA)
{
int conta = 0;
while (LISTA != NULL)
{
conta++;
LISTA = LISTA->prox;
}
return conta;
}
//libera
void libera(listaDE *LISTA)
{
delete LISTA; LISTA=0;
}