数据结构 笔记:顺序存储结构的抽象实现

SeqList设计要点

-抽象类模板,存储空间的位置和大小由子类完成

-实现顺序存储结构线性表的关键操作(增,删,查,等)

-提供数组操作符,方便快速获取元素

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((0 <= i) && (i < m_length))
        {
            return m_array[i];
        }
        else
        {
            //抛出异常

        }
    }

    T operator[] (int i)const
    {
        return (const_cast<SeqList<T>&>(*this))[i];
    }
    //顺序存储空间的容量
    virtual int capacity() const = 0;
};

猜你喜欢

转载自blog.csdn.net/qq_29962483/article/details/83061071