数据结构初阶 顺序表补充
·
一. 题目的要求
写出三种链表的接口函数
它们的功能分别是
1 查找数的位置
2 在pos位置插入值
3 在pos位置删除值
二. 实现pos
这个其实很简单 找到一步步遍历 找到这个数字就返回 找不到就提示用户下 这
个数字不存在
int SeqListFind(SL* ps,int x)
{
int i;
for ( i = 0; i < ps->size; i++)
{
if (ps->a[i]==x)
{
return i;
}
}
if (i==ps->size)
{
printf("不存在这个数");
}
return -1;
}
三. 实现在pos位置处插入数字
这个其实和我们的头插表示差不多
只要找到pos的位置
首先判断需不需要扩容
然后再将需要插入的数字依次向后面的排一位
之后再将这个数字插入就好
代码表示如下
void SeqListPushPos(SL* ps, int x, int y)
{
if ((ps->size) == (ps->capacity))
{
int newcapacity = ps->capacity == 0 ? 4 : ps->capacity * 2;
ps->capacity = newcapacity;
SLDateType* tmp = (SLDateType*)realloc(ps->a, newcapacity * sizeof(SLDateType));
if (tmp == NULL)
{
perror("pushback realloc");
}
ps->a = tmp;
}
// 其实效果和头插差不多
// 只不过头插的起始位置有点变化了
int i;
for (i = ps->size - 1; i >= x; i--)
{
(ps->a[i + 1]) = (ps->a[i]);
}
ps->a[x] = y;
ps->size++;
}
四. 在pos处删除数字
这个和头删也差不多
只需要也只不过是前面0的界限变成pos的界限
代码表示如下
void SeqListPopPos(SL* ps, int x)
{
assert(ps->size != 0);
int i;
for ( i =x; i <ps->size-1 ; i++)
{
ps->a[i] = ps->a[i + 1];
}
ps->size--;
}
演示代码如下
int main()
{
SL a1;
SeqListInit(&a1);
SeqListPushFront(&a1, 1);
SeqListPushFront(&a1, 2);
SeqListPushFront(&a1, 3);
SeqListPushFront(&a1, 4);
SeqListPushFront(&a1, 5);
SeqListPrint(&a1);
int pos=SeqListFind(&a1, 4);
SeqListPushPos(&a1, pos, 6);
SeqListPrint(&a1);
pos = SeqListFind(&a1, 3);
SeqListPopPos(&a1, pos);
SeqListPrint(&a1);
return 0;
}
演示效果如下

五 使用pos函数来模拟头增 头删 尾增 尾删
// 演示
SeqListPushPos(&a1, 0, 6);
SeqListPushPos(&a1, size-1, 6);
SeqListPopPos(&a1, 0, 6);
SeqListPopPos(&a1, size-1, 6);
以上就是本篇博客的全部内容啦 由于博主才疏学浅 所以难免会出现纰漏
希望大佬们看到错误之后能够不吝赐教 在评论区或者私信指正 博主一定及时修正
那么大家下期再见咯
更多推荐
所有评论(0)