void linkedListFree(struct linkedList *q){ while(q->size > 0){ linkedListRemoveFront(q); } free(q->frontSentinel); free(q->backSentinel); q->frontSentinel = q->backSentinel = NULL; }
/** * Deallocates every link in the list including the sentinels, * and frees the list itself. */ void linkedListDestroy(struct LinkedList* list) { while (!linkedListIsEmpty(list)) { linkedListRemoveFront(list); } free(list->frontSentinel); free(list->backSentinel); free(list); }
int main(int argc, char* argv[]) { #ifdef MEMORY_TEST_INCLUDED // Memory used BEFORE creating LinkedList long m1 = getMemoryUsage(); #endif if (argc != 2) { printf("Usage: %s <number of elements to add>\n", argv[0]); return 1; } struct LinkedList* list = linkedListCreate(); int numElements = atoi(argv[1]); for (int i = 1 ; i <= numElements; i++) { linkedListAddBack(list, (TYPE)i); linkedListRemoveFront(list); } linkedListAddBack(list, (TYPE)10); linkedListPrint(list); #ifdef MEMORY_TEST_INCLUDED // Memory used AFTER creating LinkedList long m2 = getMemoryUsage(); printf("Memory used by LinkedList: %ld KB \n", m2 - m1); #endif double t1 = getMilliseconds(); // Time before contains() for (int i = 0; i < numElements; i++) { linkedListContains(list, i); } double t2 = getMilliseconds(); // Time after contains() printf("Time for running contains() on %d elements: %g ms\n", numElements, t2 - t1); linkedListDestroy(list); return 0; }