Linked list main help

Asked

Viewed 108 times

0

I’m having trouble creating a main so test if my functions are correct. is a list program on, no need to have menu.

#include <stdio.h>
#include <stdlib.h>
#include <stddef.h>
#include <stdbool.h>

typedef struct {
int info;
struct tipo_lista * prox;
} tipo_lista;

tipo_lista * cria_no (int valor)
{
tipo_lista * novo;
novo = (tipo_lista *)malloc(sizeof(tipo_lista));
novo -> info = valor;
novo -> prox = NULL;
return novo;
}

void inserir_fim (tipo_lista * p, tipo_lista * novo_no)
{
while (p->prox != NULL)
{
    p = p->prox;
}
p->prox = novo_no;
}

void inserir_inicio (tipo_lista * p, tipo_lista * novo_no)
{
novo_no -> prox = p;
p = novo_no;
}

bool tem_numero_na_lista (tipo_lista * p, int valor)
{
while (p != NULL)
{
    if (p -> info == valor)
    {
        return true;
    }
p = p -> prox;
}
return false;
}

int qtd_nos_lista (tipo_lista * p)
{
int cont = 0;
while (p != NULL)
{
    p = p -> prox;
    cont++;
}
return cont;
}

tipo_lista * ultimo_no (tipo_lista * p, int valor)
{
while (p -> prox != NULL)
{
    p = p -> prox;
}
return p;
}

tipo_lista * encontra_no (tipo_lista * p, int valor)
{
while (p != NULL)
{
    if (p -> info == valor)
    {
        return p;
    }

    p = p -> prox;
}
return NULL;
}
  • I couldn’t find your attempt at function in the code main. Post it also that we give a analyzed. If in your attempt gave some error, post it too. I have to say that if you managed to make a chained list with dynamic memory allocation, the main shouldn’t be the problem, so I think your attempt might be closer than expected.

  • So I want to test if these functions are correct, I want to call them. I want to know what I call them in the main.

  • As any function. Enter your list in main and will call the functions normally by passing the list as parameter. To call a function, just do nome_da_funcao(parametros) and, if return, variavel = nome_da_funcao(parametros).

1 answer

2


I made a main() testing the functions. I also made some minor corrections to the code and are commented inside the code.

#include <stdio.h>
#include <stdlib.h>
#include <stddef.h>
#include <stdbool.h>

typedef struct{
    int info;
    struct tipo_lista * prox;
} tipo_lista;

tipo_lista * cria_no (int valor){
    tipo_lista * novo;
    novo = (tipo_lista *)malloc(sizeof(tipo_lista));
    novo -> info = valor;
    novo -> prox = NULL;
    return novo;
}

tipo_lista* inserir_fim (tipo_lista * p, tipo_lista * novo_no){
    //Se a lista estiver vazia
    if(p==NULL)
        return novo_no;

    tipo_lista* r = p; //Para manter a referencia ao primeiro elemento
    while (p->prox != NULL)
    {
        p = p->prox;
    }
    p->prox = novo_no;
    return r;
}

//Mudei a função para o modo que passei na outra pergunta
tipo_lista* inserir_inicio (tipo_lista * p, tipo_lista * novo_no)
{
    novo_no -> prox = p;
    return novo_no;
}

bool tem_numero_na_lista (tipo_lista * p, int valor)
{
    while (p != NULL)
    {
        if (p -> info == valor)
        {
            return true;
        }
        p = p -> prox;
    }
    return false;
}

int qtd_nos_lista (tipo_lista * p)
{
    int cont = 0;
    while (p != NULL)
    {
        p = p -> prox;
        cont++;
    }
    return cont;
}

// não entendi porque passa um valor para a função
//tipo_lista * ultimo_no (tipo_lista * p, int valor)
tipo_lista * ultimo_no (tipo_lista * p)
{
    while (p -> prox != NULL)
    {
        p = p -> prox;
    }
    return p;
}

tipo_lista * encontra_no (tipo_lista * p, int valor)
{
    while (p != NULL)
    {
        if (p -> info == valor)
        {
            return p;
        }

        p = p -> prox;
    }
    return NULL;
}

//Funcao adicionada
void imprime(tipo_lista* p){
    while (p != NULL)
    {
        printf("%d\n", p->info);
        p = p -> prox;
    }
    printf("\n");
}

int main(){
    tipo_lista *p = NULL;

    p = inserir_fim(p, cria_no(0));
    p = inserir_inicio(p, cria_no(1));
    p = inserir_inicio(p, cria_no(2));
    p = inserir_inicio(p, cria_no(3));
    p = inserir_fim(p, cria_no(7));
    p = inserir_fim(p, cria_no(8));
    p = inserir_fim(p, cria_no(9));

    imprime(p);

    int n = 9;
    if(tem_numero_na_lista(p, n))
        printf("O numero %d esta na lista\n", n);
    else
        printf("O numero %d nao esta na lista\n", n);

    printf("Quantidade de nos na lista: %d\n", qtd_nos_lista(p));

    tipo_lista *ultimo;
    ultimo = ultimo_no(p);
    printf("Valor do ultimo no: %d\n", ultimo->info);

    tipo_lista *e;
    e = encontra_no(p, 7);
    if(e==NULL)
        printf("No nao encontrado\n");
    else
        printf("No de numero %d encontrado\n", e->info);


    return 0;
}
  • Because the insertion function cannot be void?

  • Because the reference in main is to the first element, so when I enter at the beginning it becomes the second element, then the return is needed to keep up to date which is the first value of the list.

Browser other questions tagged

You are not signed in. Login or sign up in order to post.