抽象类linearList

template<class T>
class linearList{
    public :
    virtual ~linearList(){};
    virtual bool empty() const =0;
    virtual int size() const = 0;
    virtual T& get(int theIndex) const =0;
    virtual int indexOf(const T& theElement) const =0;
    virtual void erase(int the Index) = 0;
    virtual insert(int theIndex, const T& theElement) = 0;
    virtual void output(ostream& out) const =0;
}

要点:
1、一个抽象类的派生类,只有实现了基类的所有纯虚函数才是具体类,否则依然是抽象类而不能实例化。
2、把抽象类的析构函数定义为虚函数,目的是,当一个线性表的实例离开作用域时,需要调用的缺省析构函数是引用对象中数据类的析构函数。
3、关键字const指明这些函数不会改变调用对象的值(即调用对象的属性),我们把这种函数称为常量函数。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
线性表C++语言实现,包含《数据结构算法与应用-C++语言描述》练习题。 template<class T> class LinearList { public: LinearList(int MaxListSize = 10);//构造函数 LinearList(LinearList<T>& L);//复制构造函数 ~LinearList() { delete[] element; }//析构函数 bool IsEmpty() const { return length == 0; }//判断线性表是否为空 int Length() const { return length; }//返回数组长度 void SetLength(int SetLength) { length = SetLength; }//设置数组长度 int MaxSize_ret() const { return MaxSize; }//返回数组最大长度 int Current_ret(void) const { return current; } bool Find(int k, T& x);//返回第k个元素至x int Search(const T& x) const;//返回x所在位置 LinearList<T>& Delete(int k, T& x);//删除第k个元素并将它返回至x LinearList<T>& Insert(int k, const T& x);//在第k个元素之后插入x LinearList<T>& Insert(const T& x);//在表尾插入x void Output(ostream& out) const; void Self_adaption_LinearList_Size(void); void Reverse(void); bool Half(void); LinearList<T>& Alternate(LinearList<T>& A, LinearList<T>& B); LinearList<T>& Merge(LinearList<T>& A, LinearList<T>& B); LinearList<T>& Merge_1(LinearList<T>& A, LinearList<T>& B); void Split(LinearList<T>& A, LinearList<T>& B); LinearList<T>& Sort(void); /*关于前移和后移*/ void Reset(void) { current = 1; } //置current为0 T Current(void) { return element[current-1]; }//返回当前元素 bool End(void);//当且仅当当前元素为表的最后一个元素,返回true bool Front(void);//当且仅当当前元素为表的第一个元素,返回true void Next(void);//移动current至表的下一个元素,如果操作失败则引发一个异常 void Previous(void);//移动current至表的前一个元素,如果操作失败则引发一个异常 private: int length;//线性表长度 int MaxSize;//线性表最大可容纳的长度 int current;//记录线性表当前的位置 T* element;//一维动态数组 };
线性表作为一种抽象数据型,其定义通常包括以下几个关键组成部分: 1. **概念**: 线性表一个由相同型的n个数据元素(n为非负整数)构成的有限序列,可以用(a1, a2, ..., an)的形式表示,其每个元素ai代表序列的一个位置[^1]。 2. **属性**: - **同一性**: 所有数据元素的型相同。 - **有穷性**: 数据元素的数量是有限的。 - **有序性**: 每两个相邻的数据元素之间存在一种特定的关系,如递增或递减顺序。 3. **操作**: - **访问**: 可以通过索引(从1开始)访问任意一个元素。 - **插入**: 在指定位置添加新元素。 - **删除**: 删除指定位置的元素。 - **查找**: 查找给定值的第一个匹配项。 - **长度查询**: 获取线性表元素的个数。 4. **接口**: 定义一组操作的名字以及它们的行为,这些操作使得用户无需关心内部实现细节即可使用线性表。 在Python,虽然内置的数据结构如列表(List)可以近似地模拟线性表,但设计完整的抽象数据型(ADT)通常涉及到创建一个自定义,它封装了上述操作。例如: ```python class LinearList: def __init__(self): self.items = [] def append(self, item): self.items.append(item) def insert(self, index, item): if index < len(self.items): self.items.insert(index, item) else: raise IndexError("Index out of range") def delete(self, index): if index >= 0 and index < len(self.items): del self.items[index] else: raise IndexError("Index out of range") def find(self, value): return self.items.index(value) if value in self.items else None def size(self): return len(self.items) ``` 这个`LinearList`实现了基本的线性表操作。用户可以通过实例化该调用这些方法来操作线性表
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值