C++数据结构第16课、线性表存储结构的抽象实现

  • 课程目标
    — 完成顺序存储结构线性表的抽象实现

  • SeqList 设计要点
    — 抽象类模板,存储空间的位置和大小由子类完成
    — 实现顺序存储结构线性表的关键操作(增、删、查…)
    提供数组操作符,方便快速获取元素

SeqList.h

#ifndef SEQLIST_H
#define SEQLIST_H

#include "Exception.h"
#include "List.h"

namespace DTLib
{

template <typename T>
class SeqList : public List<T>
{
protected:
    T* m_array;
    int m_length;

public:
    bool insert(int i, const T& e)
    {
        bool ret = (0 <= i && i <= m_length);
        ret = (ret && m_length < capacity());
        if(ret)
        {
            for(int p = m_length-1; p >= i; p--)
            {
                m_array[p + 1] = m_array[p];
            }
            m_array[i] = e;
            m_length++;
        }
        return ret;
    }

    bool remove(int i)
    {
        bool ret = (0 <= i && i < m_length);
        if(ret)
        {
            for(int p = i; p < m_length-1; p++)
            {
                m_array[p] = m_array[p + 1];
            }
            m_length--;
        }
        return ret;
    }

    bool set(int i, const T& e)
    {
        bool ret = (0 <= i && i < m_length);
        if(ret)
        {
            m_array[i] = e;
        }
        return ret;
    }

    bool get(int i, T& e)const
    {
        bool ret = (0 <= i && i < m_length);
        if(ret)
        {
            e = m_array[i];
        }
        return ret;
    }

    int length()const
    {
        return m_length;
    }

    void clear()
    {
        m_length = 0;
    }

    T& operator[](int i)
    {
        if(i >=0 && i < m_length)
        {
            return m_array[i];
        }
        else
        {
            THROW_EXCEPTION(IndexOutOfBoundsException, "Parameter i is Invalid");
        }
    }

    T operator[](int i)const
    {
        return (const_cast<SeqList<T>&>(*this))[i];			//这条语句的意思是把只读对象的只读属性去掉,对象后面加[i]意思就是调用.operator[](i),意思就是调用上一个[]重载函数。
    }

    virtual int capacity()const = 0;

};
}
#endif // SEQLIST_H

思考:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值