rendered paste body#ifndef __NOVA__DLIST_H__
#define __NOVA__DLIST_H__
template <class T>
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};
virtual ~DList() {};
protected:
struct elementList {
T elem;
elementList *nextElement;
}
elementList firstElement;
int count;
};
template <class T> DList<T>::DList() {
firstElement = NULL;
count = 0;
}
template <class T> Dlist<T>::DList(const DList &list) {
firstElement = NULL;
count = 0;
copyList(list);
}
template <class T> DList<T>::~DList() {
removeAll();
}
template <class T> void DList::push(const T &element) {
elementList *newElem = new element;
newElem->elem = element;
newElem->nextElement = firstElement;
firstElement = element;
count++;
}
template <class T> T DList<T>::pop() {
if (isEmpty() || firstElement != NULL)
return NULL;
elementList popElement = firstElement;
T element = popElement->element;
firstElement = firstElement->nextElement;
delete popElement;
count--;
return element;
}
template <class T> bool DList<T>::isEmpty() {
if (count == 0)
return true;
else return false;
}
template <class T> void DList<T>::copyList(const DList &list) {
elementList *tmpElement;
removeAll();
for (tmpElement = list.firstElement; tmpElement != NULL;
tmpElement=tmpElement->nextElement)
enqueue(tmpElement->element);
}
template <class T> void DList<T>::removeAll() {
while (count)
pop();
}
template <class T> void DList<T>::enqueue(const T &element) {
elementList *newElem = new element;
elementList *tmpElement;
newElem->elem = element;
newElem->nextElement = NULL;
if(firstElement == NULL)
firstElement = newElem;
else {
for(tmpElement = firstElement; tmpElement->nextElement != NULL;)
tmpElement = tmpElement->nextElement;
tmpElement->nextElem = newElem;
}
count++;
}
template <class T> T DList<T>::get(Int i) {
if (firstElement == NULL)
return NULL;
int j;
T tmp;
elementList *tmpElement = firstElement;
for (j = 0; j <= i; j++)
tmpElement = tmpElement->nextElement;
return tmpElement->element;
}
#endif