《C++实现数据结构》:线性表

本文介绍了《数据结构——使用C++语言描述》中线性表的内容,包括线性表的顺序表示和链接表示。顺序表提供随机存取但插入删除效率低,而链表虽然不能随机存取,但大小不固定,插入删除效率与顺序表相当。文章实现了带有表头结点的单链表,并提供了测试代码。
摘要由CSDN通过智能技术生成

前言:这两天重新翻阅陈慧南老师编写的《数据结构——使用C++语言描述》(第2版),自己动手实现了书中的数据结构or算法。可能是为了简洁,书中有些代码没有考虑周全。我通过自己的思考实现了下,都是编译通过可以跑起来的。
接下来就愉快地开始本系列吧~
—————————————分割线——————————————

线性表类模板如下,是顺序表类和链表类的基类。

#include <iostream>
using namespace std;

//线性表基类
template <typename T>
class LinearList{
protected:
    int n;      //线性表的长度
public:
    virtual bool IsEmpty() const = 0;   //若线性表空,则返回true,否则返回false
    virtual int Length() const = 0;     //返回表中元素个数
    virtual bool Find(int i,T& x) const = 0;    //在x中返回表中下标为i的元素。若不存在,则返回false,否则返回true
    virtual int Search(T x) const = 0;  //若x不在表中.则返回-1;否则返回x在表中的下标
    virtual bool Insert(int i,T x) = 0; //在元素ai之后插入x,若i=-1,则x插在第一个元素a0前。插入成功返回true
    virtual bool Delete(int i) = 0;     //删除元素ai,删除成功返回true
    virtual bool Update(int i,T x) = 0; //将元素ai的值修改为x,修改成功返回true
    virtual void Output(ostream& out) const = 0;    //把表送至输出流
};

一、线性表的顺序表示
线性表的顺序表示是用一组地址连续的存储单元依次存储线性表中的元素。这样,逻辑上相邻的元素在物理上也相邻。顺序表是一种随机存取结构,但是插入和删除时效率较低,时间主要消耗在移动元素上。移动元素的个数取决于插入或删除元素的位置。并且表的最大存储空间是预先固定的。当然也是可以扩充空间的,但是需要额外申请一个更大的空间,并且将数据复制到新空间中。

//线性表的顺序表示
template <typename T>
class SeqList:public LinearList<T>{
private:
    int maxLength;      //顺序表的最大长度
    T* elements;        //指向顺序表的指针
public:
    SeqList(int mSize);
    ~SeqList();
    bool IsEmpty() const;               //若线性表空,则返回true,否则返回false
    int Length() const;                 //返回表中元素个数
    bool Find(int i,T& x) const;        //在x中返回表中下标为i的元素。若不存在,则返回false,否则返回true
    int Search(T x) 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值