Go to the documentation of this file.00001 #ifndef _DJS_LINKEDLIST_H_
00002 #define _DJS_LINKEDLIST_H_
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00036 struct Link;
00037
00045 struct LinkedList
00046 {
00047 struct Link* head;
00048 struct Link* tail;
00049 #ifdef SMARTLENGTH
00050 int length;
00051 #endif
00052 };
00053
00060 struct Link
00061 {
00062 void* data;
00063 struct Link* next;
00064 struct Link* prev;
00065 #ifdef SMARTLENGTH
00066 struct LinkedList* linkedList;
00067 #endif
00068 };
00069
00070 typedef struct Link Link;
00071
00072 typedef struct LinkedList LinkedList;
00073
00074 int isHead(Link* list);
00075
00076 int isTail(Link* list);
00077
00078 void* delete(Link* list);
00079
00080 Link* addAfter(Link* list, void* data);
00081
00082 Link* addBefore(Link* list, void* data);
00083
00084 void addLinkBefore(Link* list, Link* newLink);
00085
00086 Link* removeLink(Link* list);
00087
00088 LinkedList* createLinkedList(void);
00089
00090 void destroyLinkedList(LinkedList* linkedList);
00091
00092 void copyLinkedList(LinkedList* destination,
00093 LinkedList* source);
00094
00095 int contains(LinkedList* linkedList, void* data, int (*comparator)(void*,void*));
00096
00097 int equal( LinkedList* list1,
00098 LinkedList* list2,
00099 int (*comparator)(void*,void*));
00100
00101 void restoreLinksWithReferences(LinkedList* list);
00102
00103 Link* addFirst(LinkedList* linkedList, void* data);
00104
00105 Link* addLast(LinkedList* linkedList, void* data);
00106
00107 Link* removeFirst(LinkedList* linkedList);
00108
00109 Link* removeLast(LinkedList* linkedList);
00110
00111 void deleteLast(LinkedList* linkedList);
00112
00113 void* getFirst(LinkedList* linkedList);
00114
00115 void printListAbbv(LinkedList* linkedList, void (*printFunc)(void*));
00116
00117 void printList(LinkedList* linkedList, void (*printFunc)(void*));
00118
00119 int length(LinkedList* linkedList);
00120
00121 int isEmpty(LinkedList* linkedList);
00122
00123 #endif