接下来我们实现这些对顺序表基本的操作函数
将(.h)里面的函数原型复制粘贴到(.cpp)里面,注意要引用头文件,不然它不认识这些函数定义
一.初始化
我们首先来看 初始化 是干什么的,如果我们在定义好一个顺序表后不初始化,那么顺序表里面的值就都是随机值,在刚定义好的时候有效数据的长度length的值肯定是0,因为你还没有放入有效数据,刚开始是个空表。最害怕的是如果里面定义的长度length的值如果不是0,而是一个随机值,假如给length个随机值100,那就表示顺序表里面前100个值是有效的数据,但实际上这些都是无效的随机值,那肯定会出问题。所以刚开始length的值肯定要初始化为0.而初始化的作用 就是把数据结构体里面 每一个数据成员 都考虑一下,看看它要不要做初始化(应该一开始给个什么值)。
那么比如我们这个数据结构里面有2个数据成员,那么这2个就都要考虑一下,是可以继续存放它里面的随机值,还是为了后面正确的使用,要把它变成一个什么我需要的特定值(非随机值)。
这里我们需要把成员length的值初始化为0,而elem里面可以不改,继续存放随机值,因为length已经为0,那就说明elem里面的随机值都是无效的数据,所以这时elem里面的值改不改都无所谓,不影响。 这就是所谓初始化要把数据结构里面每位结构体成员都考虑一遍,一看需不需要,做不做。 再看不做影不影响,不影响的就不做。影响就必须做。
所以我们初始化操作就是这样的:(前面说了结构体指针变量通过指向符(->)访问其成员)
一开始PS是指向elem的。如图
那么还有一个问题是:PS有没有可能为空?——有的。因为PS有可能是从外面传进来的,所以PS可能为空,一旦PS为空,那访问空的length就会崩溃了。 所以这里前面要加一个断言(assert),断言PS不等于空。如果PS等于空了,就中间return出去。不要走到下一步去访问空的length了。记得断言要加include
那么初始化我们就完成了。这里还有个小技巧是——我们平时写代码的时候写一个函数,就测试一个函数。 你不能说我把一大堆函数全部写完。有时候函数的错误之间有可能是互相影响的。那么你把这个函数写完了,你就把这个函数测一下。你不能说我就写了一句代码,几乎不太可能有错,我就不测了,你测一下为好,万一后面有问题。那么我们测就在这里(text.cpp)里面测一下。测我们的初始化会不会出问题
运行后没有报错就证明且最后代码为0,就证明起码首先编译没问题了。
上面这段代码不能放到(sqlist.cpp)里面,否则(text.cpp)里面的代码测试时会出现如下错误