数据结构之顺序存储结构的抽象实现

这篇博客介绍了如何使用C++设计一个顺序存储线性表(SeqList)的抽象类模板,包括插入、删除、修改和查询等基本操作。代码实现了线性表的关键操作,并提供了数组访问方式。同时,要求子类完成存储空间的位置和大小管理。
摘要由CSDN通过智能技术生成

配套环境

clion + g++

设计要求

SeqList设计要点

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

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

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

实现代码

#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 remove(int i){
            bool ret = ((0 <= i) && (i <= m_length));
            ret = ret && (m_length < capacity());

            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));
            ret = ret && (m_length < capacity());
            if(ret){
                m_array[i] = e;
            }
            return ret;
        }

        bool get(int i, T &e) const{
            bool ret = ((0 <= i) && (i <= m_length));
            ret = ret && (m_length < capacity());

            if(ret){
                e = m_array[i];
            }

            return ret;
        }

        int length() const{
            return m_length;
        }

        bool clear(){
            m_length = 0;
        }

        /* 顺序存储线性表的数组访问方式 */
        T& operator[](int i){
            if((0 <= i) && (i < m_length)){
                return m_array[i];
            }else{
                THROW_EXCEPTION(IndexOutOfBoundsException, "Paramter i is invaild...");
            }
        }

        T operator[](int i) const{
            return (const_cast<SeqList<T>&>(*this))[i];
        }

        /* 顺序存储空间的容量 */
        virtual int capacity() const = 0;
    };
} // namespace DTLib


#endif //TEST_SEQLIST_H

喝水不忘挖井人: 更多内容请搜索狄泰软件学院(淘宝/B站)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Joyce_JTR

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值