Ajuda - Busca - Membros - Calendário
Versão Completa: hashTable com Lista Ligada
Fórum Script Brasil > Programação & Desenvolvimento > C, C++
dmendes40
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);
}
Ezequiel A. Ribeiro
CODE
#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.



Esta é uma versão simplificada de nosso conteúdo principal. Para ver a versão completa com maiores informações, formatação e imagens, por favor clique aqui.
Invision Power Board © 2001-2013 Invision Power Services, Inc.