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.
– M. Bertolazo