copy.c

In questo esempio si mostra come creare una lista a partire da un vettore di ElemType e successivamente crearne una copia.

#include "doublelist.h"
#include <stdlib.h>
Item *DListCreateFromVector(const ElemType *v, size_t v_size) {
for (size_t i = 0; i < v_size; ++i) {
list = DListInsertBack(list, &v[i]);
}
return list;
}
Item *DListCopy(const Item *i) {
Item *list_copy = DListCreateEmpty(); // Creo una lista vuota (NULL pointer)
// Itero tutti gli elementi della lista da copiare
for (; !DListIsEmpty(i); i = DListGetTail(i)) {
// Aggiungo l'elemento corrente della lista di input alla nuova lista
// usando la primitiva ListInsertBack(), la quale si occupa di allocare
// opportunamente la memoria e aggiornare i puntatori!
list_copy = DListInsertBack(list_copy, DListGetHeadValue(i));
}
return list_copy;
}
int main(void) {
ElemType v[] = { 1,2,3,4,5,6,7,8,9 };
size_t v_size = sizeof(v) / sizeof(ElemType);
Item *list = DListCreateFromVector(v, v_size);
Item *list_copy = DListCopy(list);
printf("Input:\n list: ");
printf(" head address: %p", list);
printf("\n\nOutput (copy):\n list: ");
DListWriteStdout(list_copy);
printf(" head address: %p", list_copy);
DListDelete(list);
DListDelete(list_copy);
return EXIT_SUCCESS;
}
ElemType
int ElemType
Definizione di struct ElemType.
Definition: elemtype.h:13
DListInsertBack
Item * DListInsertBack(Item *i, const ElemType *e)
La funzione DListInsertBack() aggiunge un elemento in coda ad una lista (anche vuota) e ritorna la li...
Definition: doublelist.c:60
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
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
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