//////////////////////////////////////// #ifndef LINKLIST_H #define LINKLIST_H
template class LinkedList; template // The linked-list entry. class ListEntry { T thisentry; ListEntry* nextentry; ListEntry* preventry; ListEntry(T& entry); friend class LinkedList; };
template // Construct a linked-list entry. ListEntry::ListEntry(T &entry) { thisentry = entry; nextentry = 0; preventry = 0; }
template // The linked list. class LinkedList { // The list head. ListEntry* firstentry; ListEntry* lastentry; ListEntry* iterator; void RemoveEntry(ListEntry *lentry); void InsertEntry(T& entry, ListEntry *lentry);
public: LinkedList(); ~LinkedList(); void AppendEntry(T& entry); void RemoveEntry(int pos = -1); void InsertEntry(T& entry, int pos = -1); T* FindEntry(int pos); T* CurrentEntry(); T* FirstEntry(); T* LastEntry(); T* NextEntry(); T* PrevEntry(); };
template // Construct a linked list. LinkedList::LinkedList() { iterator = 0; firstentry = 0; lastentry = 0; }
template // Destroy a linked list LinkedList::~LinkedList() { while (firstentry) RemoveEntry(firstentry); }
template // Append an entry to the linked list. void LinkedList::AppendEntry(T& entry) { ListEntry* newentry = new ListEntry(entry); newentry->preventry = lastentry; if (lastentry) lastentry->nextentry = newentry; if (firstentry == 0) firstentry = newentry; lastentry = newentry; }
template // Remove an entry from the linked list. void LinkedList::RemoveEntry(ListEntry* lentry) { if (lentry == 0) return; if (lentry == iterator) iterator = lentry->preventry;
// Repair any break made by this removal. if (lentry->nextentry) lentry->nextentry->preventry = lentry->preventry; if (lentry->preventry) lentry->preventry->nextentry = lentry->nextentry;
// Maintain list head if this is last and/or first. if (lentry == lastentry) lastentry = lentry->preventry; if (lentry == firstentry) firstentry = lentry->nextentry;
delete lentry; }
template // Insert an entry into the linked list. void LinkedList::InsertEntry(T& entry, ListEntry* lentry) { ListEntry* newentry = new ListEntry(entry); newentry->nextentry = lentry;
if (lentry) { newentry->preventry = lentry->preventry; lentry->preventry = newentry; }
if (newentry->preventry) newentry->preventry->nextentry = newentry; if (lentry == firstentry) firstentry = newentry; }
template // Remove an entry from the linked list. void LinkedList::RemoveEntry(int pos) { FindEntry(pos); RemoveEntry(iterator); }
template // Insert an entry into the linked list. void LinkedList::InsertEntry(T& entry, int pos) { FindEntry(pos); InsertEntry(entry, iterator); }
template // Return the current linked-list entry. T* LinkedList::CurrentEntry() { return iterator ? &(iterator->thisentry) : 0; }
template // Return a specific linked-list entry. T* LinkedList::FindEntry(int pos) { if (pos != -1) { iterator = firstentry; if (iterator) { while (pos--) iterator = iterator->nextentry; } }
return CurrentEntry(); }
template // Return the first entry in the linked list. T* LinkedList::FirstEntry() { iterator = firstentry;
return CurrentEntry(); }
template // Return the last entry in the linked list. T* LinkedList::LastEntry() { iterator = lastentry;
return CurrentEntry(); }
template // Return the next entry in the linked list. T* LinkedList::NextEntry() { if (iterator == 0) iterator = firstentry; else iterator = iterator->nextentry;
return CurrentEntry(); }
template // Return the previous entry in the linked list. T* LinkedList::PrevEntry() { if (iterator == 0) iterator = lastentry; else iterator = iterator->preventry;
return CurrentEntry(); }
#endif
|
| Author: Miss Meetu Choudhary 27 Aug 2009 | Member Level: Diamond Points : 2 |
Must add description to your code.
|