insert names neatly into a list, I'm not aware of this

0

// insert function ai; then only do this with the first 3 names, the others she does not order

Aluno *cad(Aluno *aluno)
{
  Aluno *aux;
  while(1)
  {
    aux = aluno;
    if(aux->prox == NULL)
    {
        Aluno *criar = novo();
        if(criar == NULL)
        {
            break;
        }
        if(strcmp(aux->nome, criar->nome) > 0)
        {
            criar->prox = aux;
            aux = criar;
        }
        else
        {
            aux->prox = criar;
        }
    }
    else
    {
        Aluno *criar = novo();
        if(criar == NULL)
        {
            break;
        }
        Aluno *aux2;
        Aluno *aux3 = aux;
        while(aux3->prox != NULL)
        {
            printf("1\n");
            aux2 = aux3->prox;
            if(strcmp(criar->nome, aux3->nome) > 0)
            {
                printf("entrei no if\n");
                criar->prox = aux2;
                aux3->prox = criar;
                break;
            }
            aux3 = aux3->prox;
        }
        if(aux3->prox == NULL)
        {
            aux3->prox = criar;
        }
    }
    aluno = aux;
}
  return aluno;
}
    
asked by anonymous 23.05.2018 / 21:39

1 answer

2

I'm assuming there is a Aluno* criar() function.

Try this here:

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

#define TRUE 1
#define FALSE 0

Aluno* criar(); // prototipo da funcao ja existente

Aluno* inserir(Aluno* alunoAInserir, Aluno* lista)
{
    Aluno* a = lista;
    Aluno* anteA = a;
    int cmpAnterior = 9;
    int cmpAtual;
    int inserido = FALSE;

    if (a == NULL)
    {
        a = lista = criar();
        return inserir(alunoAInserir, lista);
    }

    for (; a != NULL; anteA = a, a = a->prox)
    {
        if ((cmpAtual = strcmp(alunoAInserir->nome, a->nome)) != cmpAnterior)
        {
            if (cmpAnterior != 9)
            {
                if (cmpAtual < 0)
                {
                    // Insere a esquerda.
                    alunoAInserir->prox = anteA->prox /*que e o proprio a*/;
                    anteA->prox = alunoAInserir;
                }
                else if (cmpAtual == 0)
                {
                    // Insere a direita.
                    alunoAInserir->prox = a->prox;
                    a->prox = alunoAInserir;
                }

                if (cmpAtual <= 0)
                {
                    inserido = TRUE;
                    break;
                }
            }
            else if (cmpAnterior == 9 && cmpAtual < 0)
            {
                // Insere na cabeca da lista.
                Aluno* tmp = lista;
                lista = alunoAInserir;
                alunoAInserir->prox = tmp;

                inserido = TRUE;

                break;
            }

            cmpAnterior = cmpAtual;
        }
    }

    if (!inserido)
    {
        // Insere no fim da lista.
        anteA->prox = alunoAInserir;
        alunoAInserir->prox = NULL;
    }

    return lista;
}

Using the function:

Aluno* lista = inserir(alunoAInserir, NULL);
    
24.05.2018 / 00:23