5.尾删
void SLPopBack(SL* ps)
{
assert(ps);
assert(ps->size);
//顺序表不为空
//ps->arr[ps->size - 1] = -1;
--ps->size;
}
尾删不会担心空间不够,所以不需要用SLCheckCapacity来判断空间大小。
6.头删
void SLPopFront(SL* ps)
{
assert(ps);
for (int i = 0;i < ps->size - 1; i++)
{
ps->arr[i] = ps->arr[i + 1];
}
ps->size--;
}
7.指定位置之前插入数据
void SLInsert(SL* ps, int pos, SLDataType x)
{
assert(ps);
assert(pos >= 0 && pos <= ps->size);
//插入数据。
SLCheckCapacity(ps);
for (int i = ps->size;i>pos; i--)
{
ps->arr[i] = ps->arr[i - 1];
}
ps->arr[pos] = x;
ps->size++;
}
8.指定位置删除数据
void SLErase(SL* ps, int pos)
{
assert(ps);
assert(pos >= 0 && pos < ps->size);
for (int i = 0;i < ps->size - 1; i++)
{
ps->arr[i] = ps->arr[i + 1];
}
ps->size--;
}
9.查找数据
int SLFind(SL* ps, SLDataType x)
{
assert(ps);
for (int i = 0; i < ps->size; i++)
{
if (ps->arr[i] == x)
{
return i;
}
}
return -1;
}
最后我们来测试一下代码。
void Test01()
{
SL sl;
SLInit(&sl);
SLPushBack(&sl, 1);
SLPrint(sl);
SLPushBack(&sl, 3);
SLPrint(sl);//尾插两个数据
SLPushFront(&sl, 4);
SLPrint(sl);
SLPushFront(&sl, 5);
SLPrint(sl);//头插两个数据
//测试指定位置之前插入
SLInsert(&sl, 0, 44);
SLPrint(sl);
SLPopFront(&sl);//头删
SLPrint(sl);
SLPopBack(&sl);//尾删
SLPrint(sl);
SLErase(&sl, 0);
SLPrint(sl);//删除第一个数据
SLErase(&sl, 0);
SLPrint(sl);//删除第一个数据
int find = SLFind(&sl, 4);//寻找数据,返回下标
if (find < 0)
{
printf("没有找到!");
}
else
{
printf("找到了,下标是%d ", find);
}
SLDestroy(&sl);
}
int main()
{
Test01();
return 0;
}
这里我们让程序测试起来,先尾插1和3,再头插4和5,再在指定位置插入44,再头删,再尾删,再在指定位置删除两次数据,最后测试寻找函数。
这样,一个数据表的实现就完成了!