#include "List.h" #define MAX_SIZE 100 struct list { Item data[MAX_SIZE]; int size; }; List * ListNew() { List * l = malloc(sizeof(struct list)); l->size = 0; return l; } void ListDestroy(List * l) { free(l); } void ListInsertStart(List * l, Item item) { assert(l->size < MAX_SIZE); int end = l->size; while (end > 0) { l->data[end] = l->data[end-1]; end--; } l->data[0] = item; l->size++; } void ListInsertEnd(List * l, Item item) { assert(l->size < MAX_SIZE); l->data[l->size] = item; l->size++; } Item ListRemoveStart(List * l) { assert(l->size > 0); Item data_to_return = l->data[0]; int i = 0; while (i < l->size) { l->data[i] = l->data[i+1]; i++; } l->size--; return data_to_return; } Item ListRemoveEnd(List * l) { assert(l->size > 0); Item data_to_return = l->data[l->size]; l->size--; return data_to_return; } int ListSize(List * l) { return l->size; } bool ListIsEmpty(List * l) { if (l->size == 0) { return true; } return false; } void ListReverse(List * l) { // To reverse an array, swap end points until they meet in the middle Item temp; int i=0; int j=l->size-1; while (i < j) { temp = l->data[i]; l->data[i] = l->data[j]; l->data[j] = temp; i++; j--; } } char * ListToString(List * l) { char * s = calloc(MAX_PRINT_LENGTH, sizeof(char)); char snum[5]; for (int i=0; isize; i++) { snprintf(snum, 5, " %d", l->data[i]); strncat(s, snum, MAX_PRINT_LENGTH); } return s; } void ListDisplay(List * l) { for (int i=0; isize; i++) { printf("%d ", l->data[i]); } printf("\n"); }