1.顺序表
顺序表是一种线性数据结构,使用数组来存储数据元素,并按照从前往后的顺序依次存储。在顺序表中,每个数据元素都通过一个整数下标来访问,第一个元素的下标为 0,最后一个元素的下标为 n-1,其中 n 表示顺序表中元素的总数。
个人理解:
一般情况下,数组就相当于顺序表,收集数据并记录存储到数组中。
顺序表制作形式有很多,本人的顺序表是先由构造函数规定长度,再根据输入的数据个数进行扩展数组或减少数组长度。
template <class T>
class Sequencelist
{
public:
T* eles;
int N=0;
int len;
Sequencelist(int capacity)
{
eles = new T[capacity];
N = 0; //当前数组元素个数
len = capacity; //当前数组总可以存入元素个数(长度)
}
重新规划数组长度函数
void resizeList(int len)
{
this->len = len;
T* temp = eles;
eles = new T[len];
for (int i = 0; i < N; i++)
{
eles[i] = temp[i];
}
}
尾部增添
void insert(T t)
{
if (N >= len / 4)
{
resizeList(2 * N);
}
eles[N++] = t;
}
插入增添
void insert(int i, T t)
{
if (N == len)
{
resizeList(2 * N);
}
for (int j = N-1; j > i; j--) //插入之前先让插入位往后的数往后移动,让出位置插入
{
eles[j] = eles[j - 1];
}
eles[i] = t;
}
索引查找删除
T remove(int i)
{
T temp = eles[i];
for (int j = i; j < N-1; j++)
{
eles[j] = eles[j + 1]; //并不完完全全的删除,只是认为有空位,让全部
} //删除位置后的元素往前移动覆盖
N--;
if (N < len / 4)
{
resizeList(len / 2);
}
return temp;
}
由于顺序表的内存开销较大,并且插入删除操作的效率较低,因此在实际应用中,顺序表通常会被替代为其他更高效的数据结构。
比如链表(数据结构与算法学习笔记(三)_loser_omo的博客-优快云博客)
但是简单,就是对数组的一些操作。(感觉这篇在水一样)