insert_ord.c

In questo esempio si mostra come inserire un nuovo elemento in una lista esistente, rispettando l'ordinamento crescente.

#include "doublelist.h"
#include <stdlib.h>
Item *DListInsOrd(const ElemType *e, Item *i) {
if (DListIsEmpty(i) || ElemCompare(DListGetHeadValue(i), e) >= 0) {
return DListInsertHead(e, i);
}
Item *head = i;
Item* prev = NULL;
while (!DListIsEmpty(i) && ElemCompare(DListGetHeadValue(i), e) < 0) {
prev = i;
i = DListGetTail(i);
}
Item* next = i;
new_item->next = next;
new_item->prev = prev;
prev->next = new_item;
if (!DListIsEmpty(next)) {
next->prev = new_item;
}
return head;
}
int main(void) {
// Acquisizione di elementi da stdin
do {
printf("Introdurre un valore intero: ");
if (ElemReadStdin(&e) != 1) {
break;
}
i = DListInsOrd(&e, i);
} while (e != 0); // L'acquisizione termina quando viene inserito lo zero.
return EXIT_SUCCESS;
}
ElemType
int ElemType
Definizione di struct ElemType.
Definition: elemtype.h:13
Item::prev
struct Item * prev
Definition: doublelist.h:23
DListGetTail
Item * DListGetTail(const Item *i)
La funzione DListGetTail() ritorna la lista privata dell'elemento in testa. La funzione NON dealloca ...
Definition: doublelist.c:40
ElemCompare
int ElemCompare(const ElemType *e1, const ElemType *e2)
La funzione ElemCompare() confronta due elementi.
Definition: elemtype.c:9
ElemReadStdin
int ElemReadStdin(ElemType *e)
La funzione ElemReadStdin() legge un elemento da stdin.
Definition: elemtype.c:35
DListIsEmpty
bool DListIsEmpty(const Item *i)
La funzione DListIsEmpty() verifica se una lista รจ vuota.
Definition: doublelist.c:26
DListWriteStdout
void DListWriteStdout(const Item *i)
La funzione DListWriteStdout() stampa la lista specificata su stdout. Nello specifico,...
Definition: doublelist.c:121
doublelist.h
DListDelete
void DListDelete(Item *i)
La funzione ListDelete() libera la memoria occupata da tutti gli elementi di una lista,...
Definition: doublelist.c:90
DListCreateEmpty
Item * DListCreateEmpty(void)
La funzione DListCreateEmpty() crea e ritorna una lista vuota, ovvero NULL.
Definition: doublelist.c:11
Item
Definizione del tipo struct Item.
Definition: doublelist.h:20
Item::next
struct Item * next
Definition: doublelist.h:22
DListInsertHead
Item * DListInsertHead(const ElemType *e, Item *i)
La funzione DListInsertHead() aggiunge un nuovo elemento in testa ad una lista e ritorna il puntatore...
Definition: doublelist.c:15
DListGetHeadValue
const ElemType * DListGetHeadValue(const Item *i)
La funzione DListGetHead() ritorna un puntatore all'elemento in testa alla lista, senza rimuoverlo.
Definition: doublelist.c:30