- 对于顺序表,它包括:初始化,取值,查找,插入,以及删除。接下来就讲一讲删除和查找。
- 删除:它包括头删和尾删,为什么顺序表中要用到删除呢?按我的理解就是:为插入做准备的。如果不逍遥这个数就可以通过删除轻而易举的就删除掉了,如果想插入一个数,只需要删除那个数就可以插入进去了。
- 头删:代码:
//头删 void SLPopFront(SL* ps) { assert(ps); assert(ps->size); //数据整体往前挪动一位 //for循环 for (int i = 0; i < ps->size - 1; i++) { ps->arr[i] = ps->arr[i + 1]; } ps->size--;
for循环是为了向前挪动一位的。ps->size--,就是数据个数减一。
-
尾删:代码:
//尾删 void SLPopBack(SL* ps) { assert(ps); assert(ps->size); //顺序表不能为空 --ps->size; }
尾删就相对简单一点,
-
头删,尾删都写好以后,那就是指定位置之前插入/删除数据,头两个只是随意删除的,而在指定位置之前插入/删除数据,就是对顺序表有利的代码:
//在指定位置之前插入数据 void SLInsert(SL * ps, int pos, SLDataType x) { assert(ps); assert(pos >= 0 && pos <= ps->size); //插入数据:空间够不够 SLCheckCapacity(ps); //让pos及以后的数据整体往后挪动一位 for (int i = ps->size; i > pos; i--) { ps->arr[i] = ps->arr[i - 1]; } ps->arr[pos] = x; ps->size++; }
在指定位置之前插入数据,要确保内存空间够不够。
- 删除指定位置的数据:我们直接上代码为://删除指定位置的数据:
//删除指定位置的数据
void SLErase(SL* ps, int pos)
{
assert(ps);
assert(pos >= 0 && pos <= ps->size);
for (int i = pos; i < ps->size; i++)
{
ps->arr[i] = ps->arr[i + 1];
}
ps->size++;
}
- 查找数据:这就比较好写了,则代码为:
//查找 int SLFind(SL* ps, SLDataType x) { assert(ps); for (int i = pos; i < ps->size; i++) { if (ps->arr[i] == x) { //找到了 return 1; } } //没有找到 return -1; }
对于查找,只需要知道x在哪个位置,然后用for循环就可以了。
- 对于顺序表,就是这么多的知识点。只要知道它的逻辑结构就可以了。如果你想看所有的代码,可以访问我的gitte哦。
我的gitte是:
(anhuijiangkun) - Gitee.comhttps://gitee.com/anhuijiangkun