第16课 - 顺序存储结构的抽象实现

1、顺序存储结构的抽象实现 

        课程目标 

            -完成顺序存储结构线性表的抽象实现 

                


        SeqList设计要点 

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

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

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


        顺序存储结构的抽象实现 

    bool insert(int i,const T& e);
    bool remove(int i);
    bool set(int i,const T& e);
    bool get(int i,T& e) const;
    int length() const;
    void clear();
    //顺序存储线性表的数组访问方式
    T& operator[] (int i);
    T opertaor[] (int i) const; //考虑只读对象
    //顺序存储空间的长度
    virtual int capacity() const = 0; 


2、编程实验 

顺序存储线性表     Seqlist.h

#ifndef SEQLIST_H
#define SEQLIST_H

#include"List.h"
#include"Exception.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 insert(const T& e)
    {
        return insert(m_length,e);
    }

    bool remove(int i)
    {
        bool ret = (0 <= i)&&(i < m_length);
        if(ret)
        {
            for(int p = i;p<=m_length;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
        {
            THROW_EXCEPTION(IndexOutOfBoundsExpception,"Parameter i is invalid...");
        }
    }

    T operator[] (int i) const //考虑只读对象
    {
        return (const_cast<SeqList<T>&>(*this))[i];       //代码复用
    }
    //顺序存储空间的容量
    virtual int capacity() const = 0;
};

}


#endif // SEQLIST_H

main.cpp

  1. #include<iostream>  
  2. #include"SeqList.h"  
  3.   
  4. using namespace std;  
  5. using namespace DTLib;  
  6.   
  7. int main()  
  8. {  
  9.     SeqList<int>* l;  
  10.   
  11.     return 0;  
  12. }  


3、实战预告

                



阅读更多
版权声明:笔记内容整理于狄泰软件 https://blog.csdn.net/qq_39654127/article/details/79950918
个人分类: 数据结构实战开发
上一篇第15课 - 线性表的顺序存储结构
下一篇第17课 - StaticList 和 DynamicList
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭
关闭