1. 程式人生 > >資料結構 筆記:順序儲存結構的抽象實現

資料結構 筆記:順序儲存結構的抽象實現

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;
};