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

AJUDA COM PROGRAMA DE EM C.


AnaMartins

Pergunta

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

  • 0

Obrigada




 

#include <stdio.h>
#include <stdlib.h>
// 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;
};

    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;
        case 3:
            listar_LD();

        }
    }
    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);
        ordenar_no(p[LD_posicao].nome);
        LD_posicao++;
}


void listar_LD()
{
    int i;
    for(i = 0; i < LD_posicao; i++)
    {
        printf("nome: %s - ", p[i].nome);
        printf("cpf: %d - ", p[i].cpf);
        printf("tel: %d \n", p[i].tel);
    }
}

struct no *novo_no(int *dado)
{
    struct no *n;
    n = malloc(sizeof(struct no));
    if(!n)
    {
        printf("não consegui alocar memoria!\n");
        exit(-1);
    }

    n->anterior = 0;


    strcpy (n->dado,&dado);

    printf("n->dado %s \n", n->dado);
    printf("dado %s \n",&dado);

    n->proximo = 0;

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

void adicionar_no_final()
{
    aux->proximo = novo;
    novo->anterior = aux;
}

void adicionar_no_inicio()
{
    novo->proximo = inicio;
    inicio->anterior = novo;
    inicio = novo;
}

void adicionar_no_meio()
{
    anterior = aux->anterior;
    novo->proximo = aux;
    anterior->proximo = novo;
    aux->anterior = novo;
    novo->anterior = anterior;
}

void listar()
{
    if(inicio != 0)
    {
        aux = inicio;
        while(aux->proximo != 0)
        {
            printf("%d -> ", aux->dado);
            aux = aux->proximo;
        }
        printf("%d\n", aux->dado);
    }
    else
        printf("Lista vazia!\n");
}

 

Editado por AnaMartins
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
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...