|
@@ -0,0 +1,50 @@
|
|
|
+#define LINKED_LIST
|
|
|
+
|
|
|
+struct listElement {
|
|
|
+ void * data;
|
|
|
+ struct listElement *next;
|
|
|
+ struct listElement *previous;
|
|
|
+};
|
|
|
+
|
|
|
+typedef struct listElement LISTEL;
|
|
|
+
|
|
|
+LISTEL * insertBefore(void *theData, LISTEL *place)
|
|
|
+{
|
|
|
+ LISTEL * element = malloc(sizeof(LISTEL));
|
|
|
+ element->data = theData;
|
|
|
+ if(place->previous == NULL)
|
|
|
+ {
|
|
|
+ element->next = place;
|
|
|
+ place->previous = element;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ LISTEL * previous = place->previous;
|
|
|
+ previous->next = element;
|
|
|
+ element->previous = previous;
|
|
|
+ place->previous = place;
|
|
|
+ element->next = place;
|
|
|
+ }
|
|
|
+
|
|
|
+ return element;
|
|
|
+}
|
|
|
+
|
|
|
+LISTEL * insertAfter(void *theData, LISTEL *place)
|
|
|
+{
|
|
|
+ LISTEL * element = malloc(sizeof(LISTEL));
|
|
|
+ element->data = theData;
|
|
|
+ if(place->next == NULL)
|
|
|
+ {
|
|
|
+ element->previous = place;
|
|
|
+ place->next = element;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ LISTEL * next = place->next;
|
|
|
+ next->previous = element;
|
|
|
+ element->next = next;
|
|
|
+ place->next = element;
|
|
|
+ element->previous = place;
|
|
|
+ }
|
|
|
+ return element;
|
|
|
+}
|