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

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

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

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 remove(int i)
    {
        bool ret = (0 <= i)&&(i < m_length);
        if(ret)
        {
            for(int p = i; i < m_length-1; p++)					//这里的  < m_length-1 指的是赋值的次数
            {
                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)
    {
        bool ret = (0 <= i)&&(i < m_length);
        if(ret)
        {
            return m_array[i];
        }
        else
        {
            THROW_EXCEPTION(IndexOutOfBoundsException, "Parameter i is invalid");
        }
    }

    T operator[](int i)const
    {
        return (const_cast<SeqList<T>>(*this))[i];                  //清除当前对象的 const 属性,它就会调用上一个函数
    }

    virtual int capacity()const = 0;
};
}
#endif // SEQLIST_H

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

热门文章

暂无图片
编程学习 ·

DAY3-JDBC+Tomcat实现简易登陆系统

目录笔记bean包下User类dao包下UserDao类service包下UserServiceImpl类和UserService接口servlet包下HelloServlet类和LoginServlet类util包下DBUtil类xml文件 笔记 jdbc: 1.加载驱动 2.创建连接 3.写sq| 4.得到statement对象 5.执行sq|得到结果集 6.处理结果集 7.关闭资源 分…
暂无图片
编程学习 ·

前端适配问题总结

前端适配问题总结视口布局的优点:宽度和高度全部自动适应!再加上rem布局的字体适应,可以完美解决各种屏幕适配问题!1.vw:1vw等于视口宽度的1%。2.vh:1vh等于视口高度的1%。3.vmin:选取vw和vh中最小的那个。4.vmax:选取vw和vh中最大的那个。vh and vw:相对于视口的高度…
暂无图片
编程学习 ·

理解持续测试,才算理解DevOps

软件产品的成功与否,在很大程度上取决于对市场需求的及时把控,采用DevOps可以加快产品交付速度,改善用户体验,从而有助于保持领先于竞争对手的优势。作为敏捷开发方法论的一种扩展,DevOps强调开发、测试和运维不同团队间的协作与沟通。持续集成和持续测试是一个在迭代中构…
暂无图片
编程学习 ·

还是别看学位论文

最近我实验室的一个组在做疫情预测的工作。效果还行,论文也写的差不多了。不过上面的老师说引的文章都太老了,让再加点新的。于是今天下午我就和大家一起看文献。之所以之前引的都比较老,主要是因为传染病预测这块分两派,一派是理论建模派,主要工具就是微分动力模型,一般…
暂无图片
编程学习 ·

ngrok内网穿透的使用

**有时候项目没有部署到服务器,需要给用户展示效果,就可以用ngrok做内网穿透来解决这个问题** **ngrok的用法:**进入ngrok官网 http://www.ngrok.cc/,注册登录进入 在隧道管理中,进行开通隧道(即购买免费的服务器)3.开通隧道,配置端口ip,进行添加开通。4.开通后,在隧道管…
暂无图片
编程学习 ·

关于HIVE增量同步的思考

方案一、如果业务库没有删除操作,并且更新时间完整,使用更新时间做增量同步,sqoop只同步更新时间变化的数据,合并到ODS层表 方案二、如果业务库有删除操作,可以先解析数据库操作日志,存到hdfs,T+1同步数据后,对增删改做一次merge操作即可,可能需要代码实现。
暂无图片
编程学习 ·

OpenCV联通域检测 connectedComponentsWithStats

文章目录函数介绍C++ 代码示例Python 代码示例函数介绍 输入必须是单通道图像,最好是二值图 int cv::connectedComponents (cv::InputArrayn image, // input 8-bit single-channel 二值图cv::OutputArray labels, // output label mapint …
暂无图片
编程学习 ·

五篇机器阅读理解论文(Match-LSTM+Ptr,DCN,R-Net,QANet)介绍

以close-domain为例,MRC任务就是给定一篇文章和一些与文章相关的问题,要求模型给出问题的答案 MRC按照问答的形式不同大致可以分成四种任务填空型 多项选择型 片段抽取型 自由答案型首先来看一看数据集 填空型问答 所谓填空型问答是指给定一篇文章和一个缺失某个单词的句子作…
暂无图片
编程学习 ·

2020.7.1总结

前端知识: API: 判断是否为空: $.common.isEmpty() modal框: $.common.alertError() 弹层组件:layer layer.open({ title:false, type:1, closeBth:true, shadeClose:true,//阴影区域关闭 area:[‘auto’,‘atuo’]//宽,高 }) 以下是一些参数截图:layer组件:web弹层组…
暂无图片
编程学习 ·

“/“和 “\“以及“//“和“\\“有什么区别?

大家在学习生活中对于斜杠肯定不会陌生,不管在网址或者地址都会接触到这些东西,这几天刚好抽出一段时间来给大家讲解一下,有什么问题遗漏大家多多指正!!"/"正斜杠表示除法,分割;在windows系统中常用来分割“命令行参数”;正斜杠还表示虚拟路径,比如网址。&q…
暂无图片
编程学习 ·

疫情下的舆情预测系统工作报告part.4

项目地址:https://github.com/Lee991211/Innovation_training.git数据清洗 当获取了大量的微博数据,需要对冗余数据进行清洗,使数据满足一定格式,以达到模型训练的要求@杨涛同学。当然这个任务相对于爬取就比较简单了,出于保存数据备份的想法,我的清洗脚本分为两步。 was…
暂无图片
编程学习 ·

Redis持久化

Redis的持久化1. RDB持久化2. AOF持久化 ​ Redis是内存数据库,里面存储的是自己的数据库状态,因此为了保证在意外情况下数据库状态的一致性,Redis提供了持久化功能。 1. RDB持久化 ​ 该功能就是将某个时间点上的数据库状态保存到一个RDB文件中,RDB文件是一个经过压缩的二…
暂无图片
编程学习 ·

07:从一个二维数组中查找一个数

题目:从一个二维数组中查找一个数 数组要求:从左到右,从上到小依次递增的矩形二维数组 思路:我们从矩阵的右上角开始查找,若该位置的数值小于目标值,列数减一;若数值大于目标值,行数加一,后续重复。 public class Offer07 {public static void main(String[] args) {i…
暂无图片
编程学习 ·

【java基础(五十)】为什么要使用泛型程序设计

从Java程序设计语言1.0版发布以来,变化最大的部分就是泛型。致使Java SE 5.0中增加泛型机制的主要原因是为了满足1999年制定的最早的Java规范需求之一(JSR 14)。专家组花费了5年左右的时间用来定义规范和测试实现。 泛型正是我们需要的程序设计手段。使用泛型机制编写的程序…
暂无图片
编程学习 ·

elasticsearch开启内存锁定

在elasticsearch配置文件中,如果没有修改bootstrap.memory_lock 参数的话,默认为false,会导致elasticsearch缓存的文件频繁的被交换出去,从而导致在查询过程中频繁的读取磁盘,磁盘IO很高。 如何开启内存锁定? 以下修改均是基于CentOS 7.3系统 官网地址:https://www.elas…
暂无图片
编程学习 ·

微信测试公众号 接口配置信息

1:首先要先注册一个测试的公众号 1:这样就可以得到自己的appid 和 appsecret 2:接口配置信息 可以看到参数 (测试公众号只有url 和 token) 1:url 是开发者用来接收微信消息和事件 的接口URL。(必须以http://开头,目前支持80端口) 2: Token:可由开发者可以任意填写,用作…
暂无图片
编程学习 ·

Design-适配器模式

适配器模式介绍实现代码实现 介绍 意图:将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。主要解决:主要解决在软件系统中,常常要将一些"现存的对象"放到新的环境中,而新环境要求的接口是现对…
暂无图片
编程学习 ·

【位运算???】 190 颠倒二进制位

题目 颠倒给定的 32 位无符号整数的二进制位。 思路 取当前 n 的最后一位:n & 1 将最后一位移动到对应位置,第一次为 31 位,第二次是 30 位,即:31、30、29… 1、0,写作代码 bit << 31; 退出条件,二进制反转时,如果剩余位数全位 0,则可以不用再反转。 <&l…