// Jesse DeRose // jderose // PA2 #include typedef struct List *ListRef; /*** Constructors-Destructors ***/ // Returns a ListRef which points to a new empty list. ListRef newList(); // Frees all heap memory associated with its // ListRef* argument, and sets *pL to NULL. void freeList(ListRef* pL); /*** Access functions ***/ // Returns true if this List is empty, false otherwise. int isEmpty(ListRef L); // Returns true if current is undefined. int offEnd(ListRef L); // Returns true if first element is current. Pre: !isEmpty(). int atFirst(ListRef L); // Returns true if last element is current. Pre: !isEmpty(). int atLast(ListRef L); // Returns first element. Pre: !isEmpty(). int getFirst(ListRef L); // Returns last element. Pre: !isEmpty(). int getLast(ListRef L); // Returns current element. Pre: !isEmpty(), !offEnd(). int getCurrent(ListRef L); // Returns current element. Pre: !isEmpty(), !offEnd(). int getLength(ListRef L); // Returns true if this List has same elements as L in the // same order. Ignores the current marker in both Lists. int equals(ListRef A, ListRef B); /*** Manipulation procedures ***/ // Sets this List to the empty state. Post: isEmpty(). void makeEmpty(ListRef L); // Sets current marker to first element. // Pre: !isEmpty(); Post: !offEnd(). void moveFirst(ListRef L); // Sets current marker to last element // Pre !isEmpty(); Post: !offEnd(). void moveLast(ListRef L); // Moves current marker one step toward first element. // Pre: !isEmpty(), !offEnd(). void movePrev(ListRef L); // Moves current marker one step toward last element. // Pre: !isEmpty(), !offEnd(). void moveNext(ListRef L); // Inserts new element before first element. // Post: !isEmpty(). void insertBeforeFirst(ListRef L, int data); // Inserts new element after last element. // Post: !isEmpty(). void insertAfterLast(ListRef L, int data); // Inserts new element before current element. // Pre: !isEmpty(), !offEnd(). void insertBeforeCurrent(ListRef L, int data); // Inserts new element after current element. // Pre: !isEmpty(), !offEnd(). void insertAfterCurrent(ListRef L, int data); // Deletes first element. Pre: !isEmpty(). void deleteFirst(ListRef L); // Deletes last element. Pre: !isEmpty(). void deleteLast(ListRef L); // Deletes current element. // Pre: !isEmpty(), !offEnd(); Post: offEnd() void deleteCurrent(ListRef L); /*** Other operations ***/ // Prints the List L to the file pointed to by out, // formated as a space-separated string. This function plays // roughly the same role as the "toString" function in Java. void printList(FILE* out, ListRef L); // Returns a new list which contains the same elements as this List, and // in the same order. The current marker in the new list is undefined, // regardless of the state of the current marker in this list. The state // of this list is unchanged. ListRef copyList(ListRef L); // Returns a new List which is the concatenation of this list // followed by L. The current marker in the new list is undefined, // regardless of the states of the current markers in the two lists. // The states of the two Lists are unchanged. ListRef catList(ListRef A, ListRef B);