Olá, pessoal, meu nome é Valder, estou estudando Estrutura de Dados usando a linguagem C. Estou tendo dificuldades seríssimas com essa disciplina, sinseramente, não consigo entender muita coisa, já comprei 3 livros e nenhum deles consegue me fazer entender.
Quando penso que estou entendendo, começa a dar um monte de erros nos códigos, já estou até desencanando.
Será que alguém pode me ajudar com esse pequeno problema de lista encadeada ?
É o seguinte, criei uma lista simplesmente encadeada com os dados número, nome, endereço e cidade. As coisas até que estão funcionando bem, alocação de memória, inserção na lista, liberação de espaço em memória, etc.
O problema é que na hora de imprimir os dados ocorrem algumas coisas que não entendo. Estou usando o gets para capturar os dados do tipo char e o scanf para o dado inteiro. na hora da impressão o programa simplesmente não imprime o nome do dado, ou o nome da cidade, ou algum dado do tipo char, dependendo da mudança que faço no código. já fiz inúmeras, em todas o programa não imprime algum tipo de dado.
Outra coisa que não entendo é por que na explicação da teoria o autor usa ponteiro e no exemplo prático recebe um ponteiro de ponteiro na função void cria_lista e void insere_esquerda, por exemplo.
Tenho outras dúvidas, mas prefiro ir pedindo ajuda aos poucos.
Alguém pode me ajudar, por favor ?
O código está abaixo:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <string.h>
#include <malloc.h>
struct lista
{
int nro;
char nome[40];
char endereco[30];
char cidade[20];
struct lista *prox;
};
void cria_lista(struct lista **inicio, struct lista **fim)
{
*inicio = NULL;
*fim = NULL;
}
void insere_esquerda(struct lista **inicio, struct lista **fim, int numero,
char *nome, char *endereco, char *cidade, int *status)
{
struct lista *p; //variável p representa um ponteiro
p = (struct lista*)malloc(sizeof(struct lista));
if(p == NULL)
*status = 0;
else
{
p->nro = numero;
strcpy(p->nome, nome);
strcpy(p->endereco, endereco);
strcpy(p->cidade, cidade);
p->prox = *inicio;
if(*inicio = NULL)
*fim = p;
*inicio = p;
*status = 1;
}
}
void mostra_lista(struct lista *inicio)
{
struct lista *aux;
aux = inicio;
printf("Lista :");
while(aux!=NULL)
{
printf("\nNumero.....: %d\t", aux->nro);
printf("\nNome.......: %s\t", aux->nome);
printf("\nEndereco...: %s\t", aux->endereco);
printf("\nCidade.....: %s\t", aux->cidade);
aux = aux->prox;
printf("\n");
}
}
void libera_lista(struct lista **inicio, struct lista **fim)
{
struct lista *aux;
aux = *inicio;
while(aux != NULL)
{
*inicio = (*inicio)->prox;
free(aux);
aux = *inicio;
}
*fim = NULL;
}
int main ()
{
struct lista *ptri, *ptrf;
int x;
int num, ok;
char nome[20], endereco[15], cidade[15];
// Chama a rotina cria_lista
cria_lista(&ptri, &ptrf);
// Lê dados digitados e os insere na lista
for (x = 1; x <= 2; x++)
{
printf("Digite o numero do dado: ");
scanf("%d", &num); fflush(stdin);
printf("Digite o nome do dado: ");
gets(nome); fflush(stdin);
printf("Digite o endereco do dado: ");
gets(endereco); fflush(stdin);
printf("Digite a cidade do dado: ");
gets(cidade); fflush(stdin);
printf("\n");
insere_esquerda(&ptri, &ptrf, num, nome, endereco, cidade, &ok);
if(ok == 0) printf("Problema na alocacao de memoria");
}
// Procedimnt para mostrar a lista
mostra_lista(ptri);
scanf("%i", &num);
libera_lista(&ptri, &ptrf);
return 0;
getch();
}
Pergunta
Valder
Olá, pessoal, meu nome é Valder, estou estudando Estrutura de Dados usando a linguagem C. Estou tendo dificuldades seríssimas com essa disciplina, sinseramente, não consigo entender muita coisa, já comprei 3 livros e nenhum deles consegue me fazer entender.
Quando penso que estou entendendo, começa a dar um monte de erros nos códigos, já estou até desencanando.
Será que alguém pode me ajudar com esse pequeno problema de lista encadeada ?
É o seguinte, criei uma lista simplesmente encadeada com os dados número, nome, endereço e cidade. As coisas até que estão funcionando bem, alocação de memória, inserção na lista, liberação de espaço em memória, etc.
O problema é que na hora de imprimir os dados ocorrem algumas coisas que não entendo. Estou usando o gets para capturar os dados do tipo char e o scanf para o dado inteiro. na hora da impressão o programa simplesmente não imprime o nome do dado, ou o nome da cidade, ou algum dado do tipo char, dependendo da mudança que faço no código. já fiz inúmeras, em todas o programa não imprime algum tipo de dado.
Outra coisa que não entendo é por que na explicação da teoria o autor usa ponteiro e no exemplo prático recebe um ponteiro de ponteiro na função void cria_lista e void insere_esquerda, por exemplo.
Tenho outras dúvidas, mas prefiro ir pedindo ajuda aos poucos.
Alguém pode me ajudar, por favor ?
O código está abaixo:
Link para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
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.