Ir ao conteúdo
  • Cadastre-se
Kel Andrade

C++ Lista Encadeada Simples Função Pesquisar

Recommended Posts

Pessoal, Boa Noite 

 

Preciso de ajuda em programinha que estou fazendo pra faculdade sobre lista encadeada simples. 

 

Preciso criar uma função pesquisar que receba um numero por digitação, pesquisa-lo na lista e informar, qual é o seu endereço e em que lugar se encontra na lista. Já tentei de todas as formas e não consegui, alguém pode me ajudar ?

Segue código :

 

#include <iostream>
#include <stdlib.h>
#include <locale.h>
using namespace std;
struct lista //estrutura
{ int elemento; //item armazenado
struct lista *proximo; //ender. próximo item lista
} *inicio, *fim, *novo; //ender. primeiro e último item
int qtde; //quantidade de itens da lista
// protótipos das funções

void inserir ( );
void remover ( );
void listar ( );
void inserirInicio ( );
void inserirMeio ( );
void inserirFim ( );
void pesquisar( );
void atualizar ( );
void esvaziar ( ); 

int main( )


{ setlocale (LC_ALL, "Portuguese"); //permite acentuação em portugues
int opcao;
inicio = NULL; //inicializa com endereço nulo
fim = NULL; //inicializa com endereço nulo
qtde = 0;
while ( opcao != 7 )
{cout << "\n\n\n Lista Encadeada Simples - Escolha uma opção";
cout << "\n 1 - Inserir um elemento na lista";
cout << "\n 2 - Remover um elemento da lista";
cout << "\n 3 - Listar os elementos da lista";
cout << "\n 4 -  Pesquisar numero na lista";
cout << "\n 5 -  Atualizar função";
cout << "\n 6 -  Esvaziar lista:";
cout << "\n 7- Sair do programa\n";
cin >> opcao;

switch (opcao)
{case 1: inserir ( ); break;
case 2: remover ( ); break;
case 3: listar ( ); break;
case 4: pesquisar();break;
case 7: break;
default: cout << "\n Opção inválida ";
}
}
}

void inserir ( )

{ int opcao;
novo = (struct lista*) malloc (sizeof (struct lista));
cout <<"\nDigite o valor do elemento a ser inserido na lista: ";
cin>> novo->elemento; //armazena o valor no endereço em novo
if (inicio == NULL) //lista esta vazia?
{novo->proximo = NULL; //não existe próximo
inicio = novo; //endereço do primeiro item da lista
fim = novo; //endereço do último item da lista
qtde++; //mais um item inserido na lista
cout << "\n Valor inserido com sucesso";
return;
}
while ( opcao != 4 )
{cout << "\n\n\n Escolha um tipo de inserção";
cout << "\n 1 - Inserir um elemento no inicio";
cout << "\n 2 - Inserir um elemento no meio";
cout << "\n 3 - Inserir um elemento no final";
cout << "\n 4 – Sair\n";
cin >> opcao;
switch (opcao)
{case 1: inserirInicio ( ); break;
case 2: inserirMeio ( ); break;
case 3: inserirFim ( ); break;
case 4: break;
default: cout << "\n Opção invalida ";
}
}
return;
}


void inserirInicio ( )
{ novo->proximo = inicio; //o primeiro será o próximo
inicio = novo; //o novo será o primeiro
qtde++; //mais um item inserido na lista
cout << "\n Valor inserido com sucesso";
}
void inserirMeio ( )

{ int posicao, cont;
struct lista *aux, *ant;
cout <<"\nDigite a posição na lista para a inserção de meio: ";
cin>> posicao;
if (posicao == 1 || posicao > qtde)
{cout << "\nEsta posição não está no meio da lista";
return;
}
ant = inicio; //salva o ender. primeiro da lista
aux = inicio->proximo; //salva o ender. segundo da lista
for (cont=2;cont<posicao; cont++) //enquanto não for posição escolhida
{ant = aux; //salva endereço atual em ant
aux = aux->proximo; //endereço do próximo da lista em aux
}
//insere o novo elemento entre ant e aux
ant->proximo = novo; //novo: próximo do anterior
novo->proximo = aux; //atual: próximo após novo
qtde++; //mais um item inserido na lista
cout << "\n Valor inserido com sucesso";
}
void inserirFim ( )

{ novo->proximo = NULL; //será o último da lista
fim->proximo = novo; //atualiza quem era o último
fim = novo; // atualiza endereço do último
qtde++; //mais um item inserido na lista
cout << "\n Valor inserido com sucesso";
}

void remover ( )

{ struct lista *aux, *ant;
int valor;
if (inicio == NULL)
{ cout <<"\n Lista vazia";
return;
}
cout <<"\nDigite o valor a ser removido da lista: ";
cin>> valor;
//verifica se o valor a ser removido é o primeiro da lista
if (inicio ->elemento == valor)
{aux = inicio; //salva endereço do primeiro
inicio = inicio->proximo; //recebe ender. do segundo
free (aux); //libera ender. do item removido
qtde--; //menos um item na lista
if (qtde == 0)
fim = NULL; //lista vazia
cout << "\n Valor removido com sucesso";
return;
}
//verifica se o valor se encontre entre os demais da lista
ant = inicio; //salva ender. primeiro da lista
aux = inicio->proximo; //salva ender. segundo da lista
while (aux) // enquanto endereço valido
{if (aux->elemento == valor)
{ant->proximo = aux->proximo; //atualiza endereços
free(aux); //libera o ender. item removido
qtde--; //menos um item na lista
if (qtde == 0)
fim = NULL; //lista vazia
cout << "\n Valor removido com sucesso";
return;
}
else
{ant = aux; //salva endereço atual em ant
aux = aux->proximo; //endereço do próximo da lista
}
}
cout << "\n Valor informado não foi encontrado na lista";
}
void listar ( )

{ struct lista *aux;
if (inicio == NULL)
{ cout <<"\n Lista vazia";
return;
}
aux = inicio; //endereço primeiro da lista
cout << "\nRelação de itens contidos na lista encadeada\n";
while (aux) //endereço valido ?
{cout << "\n"<< aux->elemento;
aux = aux->proximo; //endereço do próximo da lista
}
}

void pesquisar ()

{ int num,valor, i=0;
struct lista *aux;

if (inicio == NULL)
{ cout <<"\n Lista vazia";
return;
}
cout <<"\n Digite o valor a ser pesquisado na lista:";
cin>> valor;

aux=inicio;  
while(aux!= NULL)
    if(aux->elemento == valor)
    aux= aux->proximo;    
           cout<<"\n a posição é"<<aux->proximo;
}
      

  • Obrigado 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×