前言:这两天重新翻阅陈慧南老师编写的《数据结构——使用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)