Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

erastoteles

Lista duplamente encadeada em C++

Recommended Posts

#include <iostream>
using namespace std;

struct tno
{
int chave;
tno *proximo;
   tno *anterior; 	
};

struct tlista
{
tno *primeiro;   	
};
void destruir_listaUm(tlista &lista){
  	tno *no=lista.primeiro;
  	while(no!=NULL){
          	tno *aux=no->proximo;
          	delete no;
          	no=aux;
  	}
  	lista.primeiro=NULL;
}
void destruir_listaDois(tlista &lista){
  	tno *no=lista.primeiro;
  	while(lista.primeiro!=NULL){
               lista.primeiro=no->proximo;
               delete no;
               no=lista.primeiro;                            
  	}
}
void inicializar_lista(tlista &lista){
lista.primeiro=NULL; 	
}
void imprimir_lista(tlista lista){
tno *no=lista.primeiro;

while(no!=NULL){
	cout<<no->chave<<endl;
	no=no->proximo;                     	
} 	
}
//
void remover_lista(tlista &lista, int x){
if(lista.primeiro==NULL)
{
	cout<<"A lista esta vazia"<<endl;
}

else if(lista.primeiro->chave==x){
		tno *no = lista.primeiro;
		lista.primeiro=no->proximo;
		if(lista.primeiro->proximo!=NULL)
	      	lista.primeiro->anterior=NULL;
           delete no;
}
else
{

       tno *remover = lista.primeiro->proximo;
	tno *anterior=lista.primeiro;
	while(remover!=NULL){
           if(remover->chave==x){
                  	anterior->proximo=remover->proximo;
                  	proximo=proximo->anterior;
                  	delete remover;
                  	remover=NULL;
           }             	
                       else 
                       { 
                        	anterior = remover;
                        	remover = remover ->proximo;     	

                      }
        	}
    	}
}
void destruir_listaTres(tlista &lista){
       while(lista.primeiro!=NULL){
               remover_lista(lista, lista.primeiro->chave);                                                
       }
}
tno *buscar_lista(tlista lista, int x){

tno *no=lista.primeiro;    
while(no!=NULL){
	if(x==no->chave)
		return no;
	no=no->proximo;                     	
}
return NULL;
}
//
void inserir_lista(tlista &lista, int x){

if(lista.primeiro==NULL){
	lista.primeiro=new tno;
	lista.primeiro->chave=x;
	lista.primeiro->proximo=NULL;               	
}
else{ 
	if(buscar_lista(lista, x)!=NULL){
		cout<<"Ja existe!";
	}
	else{
		tno *no=lista.primeiro;
		while(no->proximo!=NULL){
			no=no->proximo;
		}
		no->proximo=new tno;
		no->proximo->chave=x;
		no->proximo->proximo=NULL;                     	
	}               	
}
}

void ler_lista(tlista &lista){
int n=0;
cout<<"informe a quantidade de elementos: ";
cin>>n;
for(int i =0; i<n;i++)
{
	int x;
	cout<<"informe o elemento: ";
	cin>>x;
	inserir_lista(lista,x);
}
}
int main(){

tlista lista;
inicializar_lista(lista);
ler_lista(lista);
imprimir_lista(lista);
int x;
cout<<"Elemento a ser removido: ";
cin>>x;
remover_lista(lista,x);
imprimir_lista(lista);
destruir_listaDois(lista);

system("pause>0");
return 0;
}

 

Pessoal sou novo na área! Há dias to nessa peleja de transformar essa lista simplesmente encadeada e duplamente encadeada...tá difícil! Por favor me ajudem!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.