How to find higher value Chained List C?

1

I'm having a hard time resolving a C exercise, I've never programmed it, and I've taken C in the first semester, can you help?

  • I need to sort out 3 integer values between 0 and 200 in the main function.
  • If the value is Par, I need to put the right in the simple list chained - function List_of_Right
  • If the value is odd, I need to put the left one in the single linked list - Left_List function. NOTE: There are two lists, it is just 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 largest value in the list and return the value to the main function
  • Then I need to multiply all the values in the list by the greatest value
  • After that, just print the list.

I was able to play a part, with a lot of difficulty, and there are still parts left. Could you please help me? Here's 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
    
asked by anonymous 20.03.2017 / 02:35

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 have helped.

    
18.04.2017 / 11:52