#ifndef TmpLIST_SEEN__ #define TmpLIST_SEEN__ /////// File: List.h /////// #include // linked list template // forward teamplate class declaration template class Item; template class ListIterator; // type T must define operator== and overload << template class List { friend class ListIterator; public: List() : head(NULL) { } // empty list constructor List(T& c) // list with first cell //: head (new Item(c,NULL)) { } : head (new Item(c)) { } Item* first() { return head; } // first cell static Item* next(Item* p) // next cell { return (p ? p->next : p); } static int is_end(Item* p) // end test { return(p == End); } static Item* End; // end marker Item* last(); // last cell Item* find(T& c); // first value equals c int substitute(T& r, T& s); // r for first s on list int remove(T& c); // c from entire list void remove(Item* cell); // remove given cell int shorten(int n); // remove first n cells static T& content(Item* p) { return p->value(); } int put_on(T& c); // insert in front int insert(T& c, Item* cell); // insert after cell int append(T& c) // insert at end { return insert(c, last()); } int is_empty() { return(is_end(head)); } void display(ostream& out, // display from p to end Item* p) const; void display(ostream& out) const { display(out, head); } // display whole list ~List(); // destructor private: int equal(T&, T&); // equality test Item* head; // first cell of list void free(); // free all cells }; template class ListIterator { public: ListIterator(List& x) : l(x) { cur = pre = x.first(); } int operator()(T& n); // returns next entry in n void del(); // erases last retrieved entry from list private: List& l; Item* cur; Item* pre; }; template class Item { friend class List; friend class ListIterator; private: T& value() { return(*val); } void value(T& v) { val = &v; } // set value T* val; // store pointer to type T Item* next; Item(T& c, Item* ptr = NULL) : val(&c), next(ptr) { } // constructor }; #endif