==> 学习汇总(持续更新)
==> 从零搭建后端基础设施系列(一)-- 背景介绍
**基本思想:**用数组来存储数据,其实也就是把数组包装一下,变成可以增删改查的数据结构。
**优点:**检索数据快,时间复杂度为0(1)。
**缺点:**插入数据慢,最好的情况是直接插入末尾,时间复杂度为0(1),最坏的情况为插入头部,时间复杂度为0(n)。所以插入数据的平均复杂度为0(n/2)。
C代码实现下载
C++代码实现下载
java代码实现下载
(备用下载地址)
功能实现:
假设:
const int MAX = 100; //表的最大元素个数
int count = 0; //记录当前表中元素个数
1.bool IsFull(); 判断表是否已满
因为是静态的,所以才会有这个函数。只要count == MAX即表满了。
2.bool IsEmpty(); 判断表是否为空
只要count == 0 ,则表为空
3.int GetElementCount(); 获取元素个数
直接返回count(这个在C++、java中用才有意义,封装性)
4.void AddFromHead(T e); 添加数据(头添加)
先把所有元素往后移一个位置,空出第一个位置,然后将要添加的元素,赋值给e[0]即可。
5.void AddFromTail(T e); 添加数据(尾添加)
直接添加到数组的后面,即e[count] = 要添加的元素
6.void Insert(int local,T e); 插入数据(指定位置)
在local这个地方的后面的元素都往后移(包括local),然后把要插入的数据赋值给e[local]。
7.int GetLocal(T e); 返回元素位置
一个for循环,从第一个元素开始比较,相等则返回下标,如果找不到返回-1
8.void DeleteFromLocal(int local); 删除数据 (指定位置)
后面的元素往前覆盖,直到覆盖local那个位置,即删除成功
9.void DeleteFromElement(T e); 删除数据 (指定元素)
调用GetLocal后得到元素的位置,再调用DeleteFromLocal即可
10.int SearchFromElmemt(T e); 根据指定元素查找,返回位置
和GetLocal函数一样。
11.T SearchFromLocal(int local); 根据位置查找指定元素
先调用GetLocal得到位置后,直接进行数组的索引返回即可。
12.void Reverse(); 逆转表
一个for循环,进行头尾互换,只需遍历到count/2即可,就可以实现逆转了
13void Print(); 遍历元素
就是循环输出所有元素
14.void CopyList(SequenceList& sl); 复制表
利用AddFromTail函数,把元素添加到sl中,值得注意的是,如果用AddFromHead,就会把元素倒置了
15.void Rewrite(int local, T e); //修改元素
也是直接数组索引修改,只要注意判断越界问题就好。
需要注意的问题:
当要操作的元素是结构体的时候,搜索、删除、遍历、逆转等都要重新写,这个没有模板,只能是用到什么就写什么。比如搜索,你要根据结构体中的哪个字段进行搜索,删除也一样。遍历的时候,也要对字段进行一一遍历。