线性表

线性表是由零个或多个数据元素组成的集合,数据元素在位置上有序排列的,数据元素的个数是有限的,数据元素的类型必须相同,线性表可用于描述排队关系的问题,线性表(List)的抽象定义如下,ai是表项(数据元素),n是表长度
在这里插入图片描述
线性表的性质:
a0为线性表的第一个元素,只有一个后继
an-1为线性表的最后一个元素,只有一个前驱
除a0和an-1外的其他元素ai既有前驱,又有后继
直接支持逐项访问和顺序存取

线性表在程序中表现为一种特殊的数据类型,在C++中我们可以用线性表类模板来表示这一种数据结构,这是一个抽象类模板,是用来被继承的

template <typename T>
class List : public Object
{
   
  public:
  virtual bool insert(int i,const T& e) = 0;
  virtual bool remove(int i) = 0;
  virtual bool set(int i,const T& e) = 0;
  virtual bool get(int i,T&e)const = 0;
  virtual int length()const = 0;
  virtual void clear() = 0;
}

线性表的顺序存储结构:
指的是用一段地址连续的存储单元依次存储线性表中的数据元素,数组就是一种连续存储的数据结构,对于顺序存储结构的元素插入操作,首先判断目标位置是否合法,将目标位置之后的所有元素后移一个位置,将新元素插入目标位置,线性表长度加1, 对于顺序存储结构的元素删除操作,首先判断目标位置是否合法,将目标位置后的所有元素前移一个位置,线性表长度减1
在这里插入图片描述
我们这里定义一个父类抽象类SeqList用以被子类StaticList和DynamicList继承,使其能够实现静态数组和动态数组的创建
SeqList.h

#ifndef SEQLIST_H
#define SEQLIST_H
#include "list.h"
#include "Exception.h"
namespace CGSLib
{
   
  template <typename T>
  class SeqList : public List<T>
  {
   
    protected:
    int* m_array;
    int  m_length;
    bool instert(int i,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)
       {
   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值