• 0
Sign in to follow this  
dmendes40

hashTable com Lista Ligada

Question

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);

}

Share this post


Link to post
Share on other sites

1 answer to this question

Recommended Posts

  • 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

Edited by Ezequiel A. Ribeiro

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this