Beruflich Dokumente
Kultur Dokumente
#include <windows.h>
using namespace std;
template <class T>
class D_Node
{
public:
T element;
D_Node<T> *next_node;
D_Node<T> *prev_node;
D_Node(T = 0, D_Node * = NULL, D_Node * = NULL);
T retrieve() const;
D_Node<T> *next() const;
D_Node<T> *previous() const;
};
template <class T>
D_Node<T>::D_Node( T e, D_Node *n, D_Node *p) : element(e), next_node(n), prev_n
ode(p)
{
//Empty Constructor
}
template <class T>
T D_Node<T>::retrieve() const
{
return element;
}
template <class T>
D_Node<T> *D_Node<T>::next() const
{
return next_node;
}
template <class T>
D_Node<T> *D_Node<T>::previous() const
{
return prev_node;
}
}
return tail()->retrieve();
}
template <class T>
D_Node<T> *D_S_List<T>::head() const
{
return list_head;
}
template <class T>
D_Node<T> *D_S_List<T>::tail() const
{
return list_tail;
}
template <class T>
int D_S_List<T>::count(T n) const
{
int node_count = 0;
for (D_Node<T> *ptr = head(); ptr != NULL; ptr = ptr->next())
{
if (ptr->retrieve() == n)
{
++node_count;
}
}
return node_count;
}
template<class T>
D_S_List<T> D_S_List<T>::operator=(D_S_List<T> const&l) //Operator Overl
oading
{
this->list_head=l.list_head;
return list_head;
}
template <class T>
void D_S_List<T>::push_front(T n)
{
if (size() == 0)
{
list_head = new D_Node<T>(n, head(), tail());
list_tail = list_head;
}
else
{
list_head = new D_Node<T>(n, head(), NULL);
(list_head->next_node)->prev_node = list_head;
}
}
template <class T>
void D_S_List<T>::push_back(T n)
{
list_tail = new D_Node<T>(n, NULL, tail());
(list_tail->prev_node)->next_node = tail();
}
template <class T>
T D_S_List<T>::pop_front()
{
if (empty())
{
throw "underflow";
system("pause");
}
T e = front();
D_Node<T> *ptr = list_head;
list_head = list_head->next();
delete ptr;
return e;
}
template <class T>
T D_S_List<T>::pop_back()
{
if (empty())
{
throw "underflow";
system("pause");
}
T e = front();
D_Node<T> *ptr = list_tail;
list_tail = list_tail->previous();
delete ptr;
return e;
}