How to find higher value Chained List C?

Asked

Viewed 2,063 times

1

I’m having a hard time solving an exercise in C, I never programmed it and I got C in the first semester, you can help?

  • I need to draw 3 integer values between 0 and 200 in the main function.
  • If the value is Pair, I need to put the right in the simple chained list - Right_list function
  • If the value is odd, I need to put the left in the simple chained list - Left_list function. NOTE: It is not two lists, it is only a list, At the end the list will be divided: at the beginning of the odd and at the end the pairs.
  • Then I need to create a function to find the highest value in the list and resume the value for the main function
  • Then I need to multiply all the values in the list by the highest value
  • After that, just print the list.

I managed to make a part, with great difficulty, and still missing parts. Could you please help me? Follow a part of my code.

#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<conio.h>
#define TAM 3

//Declaração da struct nodo
struct nodo
{
int dados;struct nodo *prox;
}

//Função principal
int main()
{
    struct nodo *ptri=NULL;
    int x,nro,maior;
    for(x=0;x<TAM;x++)
    {
        nro=rand()%201;
        //função de sorteio
        //aqui deve ser implementada a verificação
        //do par e ímpar para inserir na lista, porém não sei como fazer essa comparação, tentei de várias formas o if e sempre da erro
    }   //fim do for

    printf("\n\n---LSE---\n\n");
    ImprimeLSE(&ptri); //Função de impressão
    maior= PesquisaMaior(&ptri);
    printf("\n\n---LSE-Maior = %i---\n\n",maior);
    ImprimeLSE(&ptri); //Função de impressão
    MultiplicaLSE(maior,&ptri);
    printf("\n\n---LSE Multiplicado por %i---\n\n",maior);
    ImprimeLSE(&ptri); //Função de impressão
    getch(); 
}  //fim da função

1 answer

1


I implemented the missing functions:

#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<conio.h>
#define TAM 3

//Declaração da struct nodo
typedef struct nodo
{
    int dados;
    struct nodo *prox;
} Nodo;

Nodo* insereDireita(Nodo* l, int valor)
{
    //Insere no final
    Nodo* aux = l;
    while(aux->prox != NULL)
        aux = aux->prox;
    Nodo* novo = (Nodo*)malloc(sizeof(Nodo));
    novo->dados = valor;
    novo->prox = NULL;
    aux->prox = novo;
    return l;
}

Nodo* insereEsquerda(Nodo* l, int valor)
{
    //Insere no primeiro elemento da lista
    Nodo* novo = (Nodo*)malloc(sizeof(Nodo));
    novo->dados = valor;
    novo->prox = l;
    return novo;
}

Nodo* insereLista(Nodo* l, int valor)
{

    //Lista vazia, cria o primeiro valor
    if (l==NULL)
    {
        Nodo* novo = (Nodo*)malloc(sizeof(Nodo));
        novo->dados = valor;
        novo->prox = NULL;
        return novo;
    }

    //Verifica se é par
    if(valor%2==0)
        return insereDireita(l, valor);
    else
        return insereEsquerda(l, valor);

    return l;
}

void multiplicaLSE(int maior, Nodo*  l)
{
    while(l != NULL)
    {
        l->dados = l->dados*maior;
        l= l->prox;
    }
}

int pesquisaMaior(Nodo* l)
{
    int maior = l->dados;
    while(l != NULL)
    {
        if(l->dados > maior)
            maior = l->dados;
        l= l->prox;
    }
    return maior;
}

void imprimeLSE(Nodo* l)
{
    do
    {
        printf("%d\n", l->dados);
        l= l->prox;
    }
    while(l != NULL);
}

//Função principal
int main()
{
    struct Nodo* ptri=NULL;
    int x,nro,maior;
    for(x=0; x<TAM; x++)
    {
        nro=rand()%201;
        ptri = insereLista(ptri, nro);
    }   //fim do for

    printf("\n\n---LSE---\n\n");
    imprimeLSE(ptri); //Função de impressão

    maior= pesquisaMaior(ptri);
    printf("\n\n---LSE-Maior = %i---\n\n",maior);
    imprimeLSE(ptri); //Função de impressão

    multiplicaLSE(maior,ptri);
    printf("\n\n---LSE Multiplicado por %i---\n\n",maior);
    imprimeLSE(ptri); //Função de impressão

    getch();
}  //fim da função

I hope I’ve helped.

  • hehe helped yes, thank you =)

Browser other questions tagged

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