#ifndef __NOVA__DLIST_H__ #define __NOVA__DLIST_H__ template class elementList { public: elementList(const T t) {}; ~elementList() {}; T get_elem(); elementList get_next_element(); void set_next_element(const elementList &element); private: T elem; elementList *nextElement; } template elementList::elementList(T t) { elem = t; nextElement = NULL; } template T elementLsit::get_elem() { return elem; } template elementList elementList::get_next_element() { return nextElement; } template void set_next_element(const elementList &element) { nextElement = element; } template class DList { public: inline T get(Int i); T pop(); void push(const T &element); void enqueue(const T &element); void copyList(const DList &List); bool isEmpty(); void removeAll(); DList() {}; DList() {const DList &list}; ~DList() {}; protected: elementList *firstElement; int count; }; template DList::DList() { firstElement = NULL; count = 0; } template Dlist::DList(const DList &list) { firstElement = NULL; count = 0; copyList(list); } template DList::~DList() { removeAll(); } template void DList::push(const T &element) { elementList *newElem = new elementList(element); newElem.set_next_element(firstElement); firstElement = newElem; count++; } template T DList::pop() { if (isEmpty() || firstElement != NULL) return NULL; elementList popElement = firstElement; T element = popElement.get_elem(); firstElement = firstElement.get_next_element(); delete popElement; count--; return element; } template bool DList::isEmpty() { if (count == 0) return true; else return false; } template void DList::copyList(const DList &list) { elementList *tmpElement; removeAll(); for (tmpElement = list.firstElement; tmpElement != NULL; tmpElement=tmpElement.get_next_element()) enqueue(tmpElement.get_elem()); } template void DList::removeAll() { while (count) pop(); } template void DList::enqueue(const T &element) { elementList *newElem = new elementList(element); elementList *tmpElement; if(firstElement == NULL) firstElement = newElem; else { for(tmpElement = firstElement; tmpElement.get_next_element() != NULL;) tmpElement = tmpElement.get_next_element(); tmpElement.set_next_element(newElem); } count++; } template T DList::get(Int i) { if (firstElement == NULL) return NULL; int j; T tmp; elementList *tmpElement = firstElement; for (j = 0; j <= i; j++) tmpElement = tmpElement.get_next_element(); return tmpElement.get_elem(); } #endif