#ifndef LIST_H #define LIST_H #include #define SUCCESS 0 #define FAILURE 1 typedef struct ListElement ListElement; struct ListElement { cellElement *data; ListElement *next; ListElement *previous; int pos; }; typedef struct List { ListElement *head; ListElement *tail; int size; } List; /** * Create a new list * @return List a pointer of list */ List * CreateList(); /** * Insert an element at the begining of a list * @param list pointer of a list * @param data any type of data * @return int status of the operation */ int unshift(List* list, cellElement* data); /** * Insert an element at the end of a list * @param list pointer of a list * @param data any type of data * @return int status of the operation */ int push(List* list, cellElement* data); /** * Get an element in a given list * @param list as a pointer * @param nb the number of the element (can be negative) * @return List an element */ ListElement * GetElement(List *list, int nb); /** * Delete an element with a pointer of element in the list * @param list as a pointer * @param element of the list as a pointer * @return int status of the operation */ int PopPtnList(List *list, ListElement *element); /** * Delete an element with a position in the list * @param list as a pointer * @param nb position of the element * @return int status of the operation */ int RemoveElement(List *list, int nb); /** * Delete the first element of the list * @param list as a pointer * @return int status of the operation */ int shift(List *list); /** * Delete the last element of the list * @param list as a pointer * @return int status of the operation */ int pop(List *list); /** * Delete every elements in a list * @param list as a pointer * @return int status of the operation */ int DeleteListContent(List *list); /** * Free a list * @param list as a pointer * @return int status of the operation */ int FreeList(List *list); /** * Find the first element with the given pos value * @param list as a pointer * @param pos the pos value to find * @return ListElement the found element can return NULL */ ListElement * GetElementPos(List *list, int pos); /** * Delete the first element of a list with the given pos * @param list as a pointer * @param pos pos value of the element * @return int status of the operation */ int RemoveElementPos(List *list, int pos); /** * Insert an element in a list before the given element * @param list as a pointer * @param eli an element to insert * @param elp the previous element in the list * @return int status of the operation */ int InsertBeforeElement(List *list, ListElement *eli, ListElement *elp); /** * Insert an element in a list after the given element * @param list as a pointer * @param eli an element to insert * @param elb the before element in the list * @return int status of the operation */ int InsertAfterElement(List *list, ListElement *eli, ListElement *elb); /** * Insert an element in a list before the given position * @param list as a pointer * @param data cellElement to insert * @param nb the position in list to find * @return int status of the operation */ int InsertBefore(List *list, cellElement *data, int nb); /** * Insert an element in a list after the given position * @param list as a pointer * @param data cellElement to insert * @param nb the position in list to find * @return int status of the operation */ int InsertAfter(List *list, cellElement *data, int nb); /** * Insert an element in a list before the first element with the given pos * @param list as a pointer * @param data cellElement to insert * @param pos the first pos in list to find * @return int status of the operation */ int InsertBeforePos(List *list, cellElement *data, int pos); /** * Insert an element in a list after the first element with the given pos * @param list as a pointer * @param data cellElement to insert * @param pos the first pos in list to find * @return int status of the operation */ int InsertAfterPos(List *list, cellElement *data, int pos); #endif /* LIST_H */