C++泛化双向链表

本文详细介绍了如何在C++中实现一个泛化的双向链表,包括链表的头文件(doublyLinkedList.h)和测试文件(testDoublyLinkedList.cpp)。通过示例代码展示了链表的基本操作和功能。
摘要由CSDN通过智能技术生成

泛型双向链表

双向链表(doublyLinkedList.h)

/*************************************************************************
> File Name       : doublyLinkedList.h
> Author          : Harold
> Mail            : 2106562095@qq.com
> Github          : www.github.com/Haroldcc
> Created Time    : 2020年02月28日  10时23分06秒
************************************************************************/
/***** 双向链表 *****/

#ifndef DOUBLYLINKEDLIST_H
#define DOUBLYLINKEDLIST_H

#include "linearList.h"   // ADT
#include "myExceptions.h" // 异常类
#include <sstream>        // for ostringstream

/*** 链表节点类 ***/
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();

    /* ADT */
    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 <
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值