泛型双向链表
双向链表(doublyLinkedList.h)
#ifndef DOUBLYLINKEDLIST_H
#define DOUBLYLINKEDLIST_H
#include "linearList.h"
#include "myExceptions.h"
#include <sstream>
template <typename T>
class Node
{
public:
T element;
Node<T> *prev;
Node<T> *next;
Node(){
};
Node(const T &element) {
this->element = element; }
Node(const T &element, Node<T> *prev, Node<T> *next)
{
this->element = element;
this->prev = prev;
this->next = next;
}
};
template <typename T>
class doublyLinkedList : public linearList<T>
{
private:
void checkIndex(int index) const;
Node<T> *firstNode;
Node<T> *lastNode;
int listSize;
public:
doublyLinkedList(int initialCapacity = 10);
~doublyLinkedList();
bool isEmpty() const {
return this->listSize == 0; }
int size() const {
return this->listSize; }
T &getElement(int index) const;
void setElement(int index, const T &element);
int indexOf(const T &element) const;
void removeByIndex(int index);
void removeByElement(const T &element);
void add(const T &element);
void add(int index, const T &element);
void clear();
void output(std::ostream &out) const;
};
template <typename T>
doublyLinkedList<T>::doublyLinkedList(int initialCapacity)
{
if (initialCapacity < 1)
{
std::ostringstream s;
s << "初始化容量 = " << initialCapacity << "必须 > 0";
throw illegalParameterValue(s.str());
}
this->firstNode <