一. 题目的要求
写出三种链表的接口函数
它们的功能分别是
1 查找数的位置
2 在pos位置插入值
3 在pos位置删除值
二. 实现pos
这个其实很简单 找到一步步遍历 找到这个数字就返回 找不到就提示用户下 这个数字不存在
int SLFind(SL* ps,SLDateType x)
{
assert(ps);
int i = 0;
for (i = 0; i < ps->size; i++)
{
if (ps->a[i] == x)
{
return i;
}
}
if (i == ps->size)
{
printf("找不到\n");
}
return -1;
}
三. 实现在pos位置处插入数字
这个其实和我们的头插表示差不多
只要找到pos的位置
首先判断需不需要扩容
然后再将需要插入的数字依次向后面的排一位
之后再将这个数字插入就好
代码表示如下
void SLInsert(SL* ps, int pos, SLDateType x)
{
assert(ps);
assert(pos >= 0 && pos <= ps->size);
CheckCapacity(ps);
int end = ps->size - 1;
while (end >= pos)
{
ps->a[end + 1] = ps->a[end];
end--;
}
ps->a[pos] = x;
ps->size++;
}
四. 在pos处删除数字
这个和头删也差不多
只需要也只不过是前面0的界限变成pos的界限
代码表示如下
void SLErase(SL* ps, int pos)
{
assert(ps);
assert(pos >= 0 && pos < ps->size);
int begin = pos + 1;
while (begin < ps->size)
{
ps->a[begin-1] = ps->a[begin];
begin++;
}
ps->size--;
}
演示代码如下
五 使用pos函数来模拟头增 头删 尾增 尾删
SLInsert(ps, ps->size, x);//尾插
SLErase(ps, ps->size-1);//尾删
SLInsert(ps, 0, x);//头插
SLErase(ps, 0);//头删
以上便是本文所有内容,如有错误请各位大佬不吝赐教,感谢留言