Linked list help main

-1

I'm having trouble creating a main so I can test if my functions are correct. is a linked list program, does not 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;
}
    
asked by anonymous 25.04.2017 / 16:05

1 answer

1

I made a main() by testing the functions. I've also done some minor fixes in the code and are commented out within 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;
}
    
25.04.2017 / 22:38