How to order a chained list in order of the code?

Asked

Viewed 84 times

0

Good afternoon (or good evening) staff. I am with the faculty exercise of the theme "Simple Chained List", which I must sort increasing and decreasing by the serial number of the product. But I have no idea how to write the code.

Examples: 1. Output from the sample list

L ->
(324, 899.99, playstation 5) ->
(892, 399.99, mouse gamer) ->
(435, 199.99, headset gamer) ->
NULL

2. Output from the list in ascending order

L ->
(324, 899.99, playstation 5) ->
(435, 199.99, headset gamer) ->
(892, 399.99, mouse gamer) ->
NULL

3. Output from the list in descending order

L ->
(892, 399.99, mouse gamer) ->
(435, 199.99, headset gamer) ->
(324, 899.99, playstation 5) ->
NULL

Can someone help me give a hint of some sense to make the code?

The following system code information:

a) Function that orders in ascending and descending order

// (e) Retorna a lista ordenada pelo número de série de seus produtos, de acordo com uma ordem passada pelo programa:
// ordem=0 significa ordem crescente;
// ordem=1 significa ordem decrescente.
Lista *ordenar(const Lista *L, int ordem) {
// IMPLEMENTE ESTA FUNÇÃO
    
if (listaEstaVazia(L)) {
     return NULL;
}
else {
    if (ordem == 0){
      Lista *Crescente = criaLista();
      No *p = L->inicio;
      int menor = p->prod->num_serie;

      while(p != NULL){
          if (menor < p->prod->num_serie){
            insereNoInicio(Crescente, p->prod->num_serie, p->prod->preco, p->prod->nome);
          }
          p = p->prox;
        }
        return Crescente;
    }

    else {
        Lista *Decrescente = criaLista();
        No *p = L->inicio;
        int maior = p->prod->num_serie;

        while (p != NULL){
          if (maior > p->prod->num_serie){
            insereNoInicio(Decrescente, p->prod->num_serie, p->prod->preco, p->prod->nome);
          }
          p = p->prox;
        }
        return Decrescente;
    }
  }
}

b) Structs _lista, _no and _produto:

typedef struct _produto {
    int num_serie; // numero de série do produto
    char nome[64];
    double preco;
} Produto;

// struct que define um nó curcular duplamente encadeado
typedef struct _no {
    Produto *prod;
    struct _no *prox;
} No;

// struct que define uma Lista Ligada Simples
typedef struct _lista {
    No *inicio;
    No *fim;
    int tamanho; // numero de nós da lista
} Lista;

c) Function inserted in main():

else if (strcmp(comando, "ordena") == 0) {
        scanf("%d", &ordem);

        Lista *L_aux = ordenar(L, ordem);
        destroiLista(&L);
        L = L_aux;
}

Updating: The problem now is that the function deletes the nodes from the list.

  • I recommend that you research sorts (Bubble, merge, gnome) and adapt your code to sort. Usually the methods are already available on the internet.

No answers

Browser other questions tagged

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