数据结构与算法之空间复杂度和顺序表

数据结构与算法之空间复杂度和顺序表_第1张图片

如果程序在开始运行前就已经创建好了所有空间,空间复杂度通常都是o(1)

一般不调用动态内存的和没有栈帧的开辟(例如斐波拉契数列的递归)为o(1)

其余一般是o(n),其余类型很少见。

递归不能过猛,不然容易溢出。

顺序表的实现

首先我们要确定顺序表要实现的功能

增删查改显示应该是最基本的功能。

所有接下来我们就要逐个实现这些功能

首先我们要确定一个表包含哪些信息

首先肯定是这个表,那么我们就要开辟空间。

其次我们要让使用的人知道这个表的基本信息

那么我们就要包含表的总大小和已经被占用的空间的信息。

那么一个有多个信息构成的东西我们可以通过打包起来实现

显然这个时候结构体就非常符合条件了。

那么又由于不同的表只能用来存储对应的数据,所有为了增加我们代码的普遍性,我们就将我们需要存储的数据全部重命名,这样我们要改变表要对应的对象的时候,只要改变重命名即可,而不用对这个程序进行大刀阔斧的改变。

首先整个程序由三个部分组成,分别是头文件(用来放函数的声明和函数的头文件),其次是函数的实现文件,最后是我们在使用的时候的操作文件

数据结构与算法之空间复杂度和顺序表_第2张图片

数据结构与算法之空间复杂度和顺序表_第3张图片

接下来我们就要实现表的创建和销毁

实现如下

数据结构与算法之空间复杂度和顺序表_第4张图片

切记要用指针,否则再函数中改的将会是形参!

数据结构与算法之空间复杂度和顺序表_第5张图片

例如!是绝对不行的!

先实现表的打印

数据结构与算法之空间复杂度和顺序表_第6张图片

接下来就要实现头插头删,尾插尾删(即增的功能)

数据结构与算法之空间复杂度和顺序表_第7张图片

数据结构与算法之空间复杂度和顺序表_第8张图片

数据结构与算法之空间复杂度和顺序表_第9张图片

要防止size变成小于0出现越界

又由于头插也要检查空间的问题,我们就可以将检查空间是否足够和扩容打包成一个函数

数据结构与算法之空间复杂度和顺序表_第10张图片

接下来就要实现定向插入的操作了

数据结构与算法之空间复杂度和顺序表_第11张图片

删除的实现

数据结构与算法之空间复杂度和顺序表_第12张图片

但是显然无论是删除还是插入我们都需要知道我们要的数据的位置在哪里(下标)

数据结构与算法之空间复杂度和顺序表_第13张图片

并且实现了插入以后我们就可以在头插和尾插的地方进行复用了

数据结构与算法之空间复杂度和顺序表_第14张图片

数据结构与算法之空间复杂度和顺序表_第15张图片

同样尾删,头删也可以复用

数据结构与算法之空间复杂度和顺序表_第16张图片

数据结构与算法之空间复杂度和顺序表_第17张图片

修改的实现

数据结构与算法之空间复杂度和顺序表_第18张图片

你可能感兴趣的:(数据结构)