Olá gostaria de ajuda com o programa abaixo, é um trabalho escolar onde devo usar lista dinâmica, lista duplamente ligada e arvore binária.
// Lista Dinamica
struct pessoa
{
int cpf;
char nome[50];
int tel;
}p [10];
void adicionar();
void menu();
int opcao;
int LD_posicao = 0;
void inicializar();
void listar();
//----------------------//
//Lista DUplamente Ligada
struct no
{
struct no *anterior;
char *dado;
struct no *proximo;
};
struct no *novo_no(char *dado);
void ornenar_no(char dado);
void adicionar_no_final();
void adicionar_no_inicio();
void adicionar_no_meio();
struct no *inicio;
struct no *novo;
struct no *aux;
struct no *anterior;
char LDL_nome[50];
//
int main()
{
inicializar();
opcao = 0;
while(opcao !=3)
{
menu();
switch(opcao)
{
case 1:
adicionar();
break;
case 2:
listar();
break;
void adicionar()
{
printf("Digite o cpf:\n ");
scanf("%d", &p[LD_posicao].cpf);
printf("Digite o tel:\n ");
scanf("%d", &p[LD_posicao].tel);
printf("Digite o nome:\n ");
fflush(stdin);
scanf("%s",p[LD_posicao].nome);
printf("recebeu antes -> %s ", p[LD_posicao].nome); Gostaria de passar como parâmetro esse conteúdo "nome" (que foi alocado em uma estrutura simples) para
estrutura "struct no *novo_no(char *dado)", isso é possível? Se não, como faço pra fazer uma alocação dinâmica de memoria usando uma variável/vetor do tipo char.
struct no *novo_no(char *dado) como posso mudar essas estutura para que ela trabalhe alocando variavel/ vetor do tipo char?
{
struct no *n;
n = malloc(sizeof(struct no));
if(!n)
{
printf("não consegui alocar memoria!\n");
exit(-1);
}
// PROBLEMA ESTA NA LINHA 134 (novo=novo_no(*dado)) , NOVO NÃO ESTA RECEBENDO novo_no(*dado);
//n->dado RECEBE O VALOR DE DADO POREM DE ALGUMA FORMA NÃO RETORNA PARA O PARAMETRO (*dado) da funcao *novo_no
novo = novo_no(*dado);
printf("novo-> %s \n", *novo);
Pergunta
AnaMartins
Olá gostaria de ajuda com o programa abaixo, é um trabalho escolar onde devo usar lista dinâmica, lista duplamente ligada e arvore binária.
// Lista Dinamica
struct pessoa
{
int cpf;
char nome[50];
int tel;
}p [10];
void adicionar();
void menu();
int opcao;
int LD_posicao = 0;
void inicializar();
void listar();
//----------------------//
//Lista DUplamente Ligada
struct no
{
struct no *anterior;
char *dado;
struct no *proximo;
};
struct no *novo_no(char *dado);
void ornenar_no(char dado);
void adicionar_no_final();
void adicionar_no_inicio();
void adicionar_no_meio();
struct no *inicio;
struct no *novo;
struct no *aux;
struct no *anterior;
char LDL_nome[50];
//
int main()
{
inicializar();
opcao = 0;
while(opcao !=3)
{
menu();
switch(opcao)
{
case 1:
adicionar();
break;
case 2:
listar();
break;
}
}
return 0;
}
void inicializar()
{
}
void menu()
{
printf("1 - Adicionar\n");
printf("2 - Listar\n");
printf("3 - AdicionarOrdenando\n");
scanf("%d", &opcao);
}
void adicionar()
{
printf("Digite o cpf:\n ");
scanf("%d", &p[LD_posicao].cpf);
printf("Digite o tel:\n ");
scanf("%d", &p[LD_posicao].tel);
printf("Digite o nome:\n ");
fflush(stdin);
scanf("%s",p[LD_posicao].nome);
printf("recebeu antes -> %s ", p[LD_posicao].nome); Gostaria de passar como parâmetro esse conteúdo "nome" (que foi alocado em uma estrutura simples) para
estrutura "struct no *novo_no(char *dado)", isso é possível? Se não, como faço pra fazer uma alocação dinâmica de memoria usando uma variável/vetor do tipo char.
ordenar_no(p[LD_posicao].nome);
LD_posicao++;
}
void listar_LD()
{
int i;
for(i = 0; i < LD_posicao; i++)
{
printf("nome: %s - ", p.nome);
printf("cpf: %d - ", p.cpf);
printf("tel: %d \n", p.tel);
}
}
struct no *novo_no(char *dado) como posso mudar essas estutura para que ela trabalhe alocando variavel/ vetor do tipo char?
{
struct no *n;
n = malloc(sizeof(struct no));
if(!n)
{
printf("não consegui alocar memoria!\n");
exit(-1);
}
n->anterior = 0;
n->dado=dado;
n->proximo = 0;
printf("n->dado %s \n", n->dado);
printf("dado %s \n",&dado);
return n;
}
void ordenar_no(char *dado)
{
printf("recebeu depois -> %s \n ", dado);
// PROBLEMA ESTA NA LINHA 134 (novo=novo_no(*dado)) , NOVO NÃO ESTA RECEBENDO novo_no(*dado);
//n->dado RECEBE O VALOR DE DADO POREM DE ALGUMA FORMA NÃO RETORNA PARA O PARAMETRO (*dado) da funcao *novo_no
novo = novo_no(*dado);
printf("novo-> %s \n", *novo);
if(inicio == 0)
{
inicio = novo;
printf("inicio primeiro if= %s\n",inicio);
printf("inicio->dado= %s\n",inicio->dado);
}
else
{
printf("inicio->dado segundo if = %s\n", inicio->dado);
printf("*dado = %s\n", *dado);
// decidir aonde inserir
if(strcmp (inicio->dado,dado) == 1)
adicionar_no_inicio();
else
{
aux = inicio;
while((aux->proximo != 0) && (strcmp (aux->dado,dado) == -1))
{
aux = aux->proximo;
}
if(aux->proximo == 0 && (strcmp (dado,aux->dado) == 1))
adicionar_no_final();
else
adicionar_no_meio();
}
}
}
Observação: o programa esta incompleto mesmo.
Link para o comentário
Compartilhar em outros sites
3 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.