Ir para conteúdo
Fórum Script Brasil
  • 0

hashTable com Lista Ligada


dmendes40

Pergunta

Boa Tarde a todos,

não encontro o erro desse programa,

na hora de cadastrar ele trava, após a inserção do ultimo dado do cadastro.

Objetivo: Criação de Hashtable implementada por Lista Ligada com opção busca na hashtable

#include<iostream>

#include<math.h>

using namespace std;

typedef struct produto

{

int codigo;

char descricao[20];

int quantidade;

int fornecedor;

float precoCusto;

float precoVenda;

} Produto;

typedef struct lista

{

Produto *ponteiro;

lista *proximo;

} Lista;

struct lista inserirProdutoNaLista(Produto *p1, Lista *l1)

{

Lista *auxLista;

*auxLista = *l1;

cout<<p1->codigo;

if(auxLista == NULL)

{

auxLista->ponteiro = p1;

auxLista->proximo = NULL;

}

else

{

auxLista->ponteiro = p1;

*(auxLista->proximo) = *l1;

}

*l1 = *auxLista;

return *l1;

}

void busca(Lista l1, int codigo)

{

Lista *auxLista;

*auxLista = l1;

Produto *auxProduto;

*auxProduto = *(auxLista->ponteiro);

while (auxLista != NULL && auxProduto->codigo != codigo)

{

*auxLista = *(auxLista->proximo);

*auxProduto = *(auxLista->ponteiro);

if(auxLista == NULL)

{

cout<<"Elemento não encontrado!\n";

}

else

{

if(auxProduto->codigo == codigo)

{

cout<< auxProduto->codigo << "\t" << auxProduto->descricao << "\t" << auxProduto->quantidade << "\t" << auxProduto->fornecedor << "\t" << auxProduto->precoCusto << "\t" << auxProduto->precoVenda;

cout<<"\n";

}

}

}

}

int main()

{

Lista *l1 = new Lista [7];

l1 = NULL;

Produto *auxProduto = new Produto;

Lista *auxLista;

int hash,opcao,codigo;

do

{

//Limpando a tela

system("cls");

//Imprimindo o menu

printf("Escolha um opcao: \n");

printf(" 1 - Inserir um produto.\n");

printf(" 2 - Buscar um produto pelo codigo.\n");

printf(" 3 - Sair do Programa.\n");

//usuario escolhe a opcao

printf("\nOpcao: ");

scanf("%d", &opcao);

//verifica a opcao selecionada

switch(opcao)

{

case 1:

cout<< "\nDigite o codigo do produto: ";

cin>>auxProduto->codigo;

cout<< "Digite o descricao do produto: ";

cin>>auxProduto->descricao;

cout<< "Digite o quantidade de produtos: ";

cin>>auxProduto->quantidade;

cout<< "Digite o fornecedor do produto: ";

cin>>auxProduto->fornecedor;

cout<< "Digite o preço de custo do produto: ";

cin>>auxProduto->precoCusto;

cout<< "Digite o preço de venda do produto: ";

cin>>auxProduto->precoVenda;

hash = auxProduto->codigo % 7;

*auxLista = l1[hash];

l1[hash] = inserirProdutoNaLista(auxProduto,auxLista);

break;

case 2:

cout<<"Digite o codigo que deseja procurar: ";

cin>>codigo;

hash = codigo % 7;

*auxLista = l1[hash];

busca(*auxLista,codigo);

break;

case 3:

printf("\nFim do programa!!!\n");

break;

default:

printf("\nOpcao invalida!\n");

}

cin.sync();

cin.get();

} while (opcao != 3);

}

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

#include<iostream>
#include<math.h>

using namespace std;

typedef struct produto
{
int codigo;
char descricao[20];
int quantidade;
int fornecedor;
float precoCusto;
float precoVenda;
} Produto;

typedef struct lista
{
Produto *ponteiro;
lista *proximo;
} Lista;


struct lista inserirProdutoNaLista(Produto *p1, Lista *l1)
{
Lista *auxLista = new Lista;
*auxLista = *l1;

cout<<p1->codigo;

if(auxLista == NULL)
{
auxLista->ponteiro = p1; 
auxLista->proximo = NULL;
}
else
{
 cout<<"teste3"<<endl;   
auxLista->ponteiro = p1;
                   
auxLista->proximo = l1; 

cout<<"teste4"<<endl;

}
*l1 = *auxLista;
return *l1;
}

void busca(Lista *l1, int cod)
{
Lista *auxLista = new Lista;
*auxLista = *l1;

Produto *auxProduto;
*auxProduto = *(auxLista->ponteiro);


cout<<"teste5"<<endl;

//while (auxLista != NULL || auxProduto->codigo != cod) 
{
   cout<<"teste6"<<endl;  
*auxLista = *(auxLista->proximo);
*auxProduto = *(auxLista->ponteiro);

cout<<"teste8"<<endl;
if(auxLista == NULL)
{
cout<<"Elemento não encontrado!\n";
}
else
{
if(auxProduto->codigo == cod)
{
                      cout<<"teste7"<<endl;
cout<< auxProduto->codigo << "\t" << auxProduto->descricao << "\t" << auxProduto->quantidade << "\t" << auxProduto->fornecedor << "\t" << auxProduto->precoCusto << "\t" << auxProduto->precoVenda;
cout<<"\n"; 
}
}
}
}

int main()
{
Lista *l1 = new Lista [7];
Produto *auxProduto = new Produto;
Lista *auxLista = new Lista;
int hash,opcao,codigo;



do 
{
//Limpando a tela
system("cls");

//Imprimindo o menu
printf("Escolha um opcao: \n");
printf(" 1 - Inserir um produto.\n");
printf(" 2 - Buscar um produto pelo codigo.\n");
printf(" 3 - Sair do Programa.\n");

//usuario escolhe a opcao
printf("\nOpcao: ");
scanf("%d", &opcao);

//verifica a opcao selecionada
switch(opcao)
{
case 1:
cout<< "\nDigite o codigo do produto: ";
cin>>auxProduto->codigo; 
cout<< "Digite o descricao do produto: ";
cin>>auxProduto->descricao;
cout<< "Digite o quantidade de produtos: ";
cin>>auxProduto->quantidade;
cout<< "Digite o fornecedor do produto: ";
cin>>auxProduto->fornecedor;
cout<< "Digite o preço de custo do produto: ";
cin>>auxProduto->precoCusto;
cout<< "Digite o preço de venda do produto: ";
cin>>auxProduto->precoVenda; 

hash = auxProduto->codigo % 7;

cout<<"teste0"<<endl;

*auxLista = l1[hash];  //

cout<<"teste1"<<endl;

l1[hash] = inserirProdutoNaLista(auxProduto,auxLista);

cout<<"teste2"<<endl;

break;
cout<<"teste2"<<endl;
case 2:
cout<<"Digite o codigo que deseja procurar: ";
cin>>codigo;
hash = codigo % 7;
*auxLista = l1[hash];
busca(auxLista,codigo);
break;

case 3:
printf("\nFim do programa!!!\n");
break;

default: 
printf("\nOpcao invalida!\n"); 
}
cin.sync(); 
cin.get();
} while (opcao != 3);


l1 = NULL;
auxProduto = NULL;
auxLista = NULL;

delete l1;
delete auxProduto;
delete auxLista;

}

Amigo fiz algumas alterações e consegui cadastrar um produto e depois fazer a busca do mesmo.

Existe algum problema com o while da busca. Parece -me que ele fica indefinidamente no loop.

o problema após cadastrar o último item está nessa parte *auxLista = l1[hash], tirei o l1 = NULL e consegui fazer o cadastro.

64a472e7fb.jpg

Editado por Ezequiel A. Ribeiro
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152.1k
    • Posts
      651.8k
×
×
  • Criar Novo...