Ir ao conteúdo
  • Cadastre-se

Lista Duplamente Encadeada


Wendel Rios

Posts recomendados

Bom dia, estou fazendo um código de uma lista duplamente encadeada onde tenho as funções inserir, retirar, listar e exibir o menor elemento e seu sucessor e seu antecessor, mas na função listar por exemplo tá ocorrendo um problema: quando eu insiro por exemplo uma quantidade maior que 2 numeros, na hora q eu peço p listar, o codigo só tá exibindo o 1º e o último elemento. E outro coisa q tá me incomondando na execução do código é q por exemplo: se eu chamar a função remover ou a função listar menor elemento com a lista vazia, o codigo trava, sendo q era para exibir a mensagem "lista vazia". Segue o código ai embaixo, se alguém puder ajudar eu agradeceria.

 

#include<iostream>

using namespace std;

struct no{
	int info;
	int antecessor;
	int sucessor;
	struct no *prox;
	struct no *ant;
};typedef struct no *lista;

lista inicio = NULL;
lista fim = NULL;

bool listavazia( ){
	if(inicio){
		return false;
	}else {
		return true;
	}	
}


void insere(){
	lista p;
	p = new no;
	cout<<"Insira um numero na lista ";
	cin>>p->info;
	p->prox = NULL;
	cout<<"Numero "<<p->info<<" inserido na lista\n\n";
	if(listavazia()){
		inicio = p;
		fim = p;
	} else{
		inicio->prox = p;
		p->ant = inicio;
		p->prox = NULL;
		fim = p;
	}
}

void retira() {
	lista p=inicio, aux= p->prox, post=NULL;
	int num;
	
	cout<<"Qual numero sera excluido\n\n";
	cin>>num;
	if(listavazia()){
		cout<<"A lista esta vazia!\n\n";
	}else{
		while(p!=NULL){
			if(num == p->info && p->ant == NULL){
				aux = p->prox;
				aux->ant = inicio;
				inicio = aux;
				delete(p);
				cout<<"\n\nNo retirado.";
				}else if(num == p->info && p->prox == NULL){
					aux = p->ant;
					fim = aux;
					aux->prox = NULL;
					delete(p);
					cout<<"\n\nNo retirado";
				}else{
					aux = p->ant;
					post = p->prox;
					aux->prox = post;
					post->ant = aux;
					delete(p);
				}
		}
	}
}

void listar(){
	lista p=inicio;
	
		if(!listavazia()){
		cout<<"A lista esta assim: \n\n";
		while(p!=NULL){
			cout<<"\t||"<<p->info;
			p=p->prox;
		}
		}else{
			cout<<"A lista esta vazia!!\n\n";
		}
		
	}

void menor_elemento(){
	lista p=inicio, aux=inicio->prox,menor=NULL;
	
	if(listavazia()){
		cout<<"Lista Vazia";
	}else{
		while(p!=NULL){
			if(p->info < aux->info){
				menor = p;
				menor->ant = p->ant;
				menor->prox = p->prox;
				cout<<"\n\nMenor elemento da lista: "<<menor->info;
				cout<<"\nSeu elemento anterior: "<<menor->ant->antecessor;
				cout<<"\nSeu elemento sucessor: "<<menor->prox->sucessor;
				p = p->prox;
				aux = aux->prox;
			}else if(p->info > aux->info){
			menor = aux;
			menor->ant = aux->ant;
			menor->prox = aux->prox;
			cout<<"\n\nMenor elemento da lista: "<<menor->info;
			cout<<"\nSeu elemento anterior: "<<menor->ant->antecessor;
			cout<<"\nSeu elemento sucessor: "<<menor->prox->sucessor;
			p = p->prox;
			aux = aux->prox;
		}
	}
}
}

void menu(int op) {
	
	do{
	
		
	cout<<"\n----MENU----\n\n";
	cout<<"--1--Inserir na Lista\n\n";
	cout<<"--2--Remover item da Lista\n\n";
	cout<<"--3--Listar elementos da Lista\n\n";
	cout<<"--4--Listar menor elemento da lista, seu antecessor e seu sucessor.\n\n";
	cout<<"--0--Sair\n\n";
	cin>>op;
	
	
	switch(op){
		
		case 1: insere();
			break;
			
		case 2: retira();
			break;
			
		case 3: listar();
			break;
		
		case 4: menor_elemento();
			break;
		
	}
	
}while(op!=0);
}





int main(){
	
	int op;
	
	menu(op);

}

 

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novas respostas.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!