Ir ao conteúdo
  • Cadastre-se

Kel Andrade

Membro Júnior
  • Posts

    1
  • Cadastrado em

  • Última visita

Reputação

1
  1. 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; }

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...