知识特点:
顺序表专题中第一篇是实现了顺序表基本的插入和删除,这一篇将继续为大家讲解顺序表特定位置之前的插入和删除。
还是建议大家先把合集第一篇看完再继续学习
1.特定位置插入/删除
1.1头文件创建方法
void SLInsert(SL* ps, int pos, SLDataType x);
void SLErase(SL* ps, int pos);
int SLFind(SL* ps, SLDataType x);
1.2在指定位置之前插入数据
源文件实现:
void SLInsert(SL* ps, int pos, SLDataType x);//pos指定插入的位置下标
{
assert(ps);//顺序表地址不能为空,今天出的指针3合集里有讲
//pos不能是任意的整数
// pos一定>=0,顺序表对应的下标,下标不能小于0(左区间)
assert(pos >= 0 && pos <= size);//小于等于有效数据个数
//插入数据:检测空间够不
SLCheckCapacity(ps);//顺序表合集1已经讲解这个函数的封装,用来判断空间是否够
//插入了一个数之后,需要让pose和之后数据都要同一向后移(并且是最后一个先往后移动)
for (int i = size; i > pos; i--)
{
ps->arr[i] = ps->arr[i-1];
}
ps->arr[pos] = x;
ps->size++;
}
测试:
void SLTest02()
{
SL sl;
SLInit(&sl);
//测试尾插
SLPushBack(&sl, 1);
SLPushBack(&sl, 2);
SLPushBack(&sl, 3);
SLPushBack(&sl, 4);
//测定指定位置前插入
SLInsert(&sl, 0, 99);
SLPrint(sl);//插入完打印
SLDestroy;
}
int main()
{
SLTest02();//写一个测试函数
//SLTest01();//写一个测试函数
return 0;
}
1.3 在指定位置之前删除数据
实现源码:
void SLErase(SL* ps, int pos);
{
assert(ps);//顺序表不能为空
assert(pose >= 0 && pos < ps->size);
for (int i = pos;i<size-1; i++)
{
ps->arr[i] = ps->arr[i + 1];
}
ps->size--;
}
测试:
void SLTest02()
{
SL sl;
SLInit(&sl);
//测试尾插
SLPushBack(&sl, 1);
SLPushBack(&sl, 2);
SLPushBack(&sl, 3);
SLPushBack(&sl, 4);
//测定指定位置前插入
/*SLInsert(&sl, 0, 99);*/
//测试删除指定位置数据
SLErase(&sl, 0);
SLPrint(sl);
SLDestroy(&sl);
}
int main()
{
SLTest02();//写一个测试函数
//SLTest01();//写一个测试函数
return 0;
}
完——