顺序表指定位置的插入,查找,删除

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

本篇是对上篇顺序表结构的构建的补充!!!


一、在指定位置前插入数据

前面我们讲了前删和尾删,如果我们想实现指定位置数据的删除该如何做呢?

基本思路:

  1. 构建函数,函数的参数包括顺序表的结构体指针(用来查找数据),指定位置,要插入的数据
  2. 要实现上述的功能,要对相应的参数进行诊断,防止出错
  3. 最后理清插入数据后,其他数据的位置变化

注意:别忘记size的大小变化

//在指定位置前插入数据
void SLIninsert(SL* ps, int pos, SQL x)//引入插入数据的位置
{
	assert(ps);
	assert(pos >= 0 && pos <= ps->size);//pos指的是对应的下标
	//注意从前面插入,数据要从前往后移动
    SLCheckCapacity(ps);//首先要判断一下内存够不够
	for (int i = ps->size; i >= pos+1; i--)
		ps->arr[i] = ps->arr[i-1];//arr[pos+1]=arr[pos]
	ps->arr[pos] = x;
	ps->size++;
}

如图,从pos前插入数据,其他的数据都要往后移动,但是只能从后面的数据开始往后移,否则前面的数据会覆盖后面的数据

二、在指定位置处删除数据

基本思路:在指定位置删除数据,我们只需要找到顺序表中对应的数据删除即可,然后其他数据向前移动

//删除指定位置的数据
void SLErase(SL* ps, int pos)
{
	assert(ps);
	assert(pos >= 0 && pos < ps-> size);//注意要用指针找到数据表中的元素
	for (int i = pos; i < ps->size - 1; i++)//注意这里删除时数据的移动要从前往后移
	{
		ps->arr[i] = ps->arr[i+1];
	}
	ps->size--;//记得最后将数据个数--
};

注意:此时size的下标位置处是不存在数据的,所以pos不能==ps->size

我们可以通过最后一次的交换下标确定循环的结束条件,也就是i的取值

如图,所有元素向前移动,只能先将前面的数往前移

三、查找到指定的元素

查找元素的思想非常简单,就是利用循环遍历数组即可,然后将元素下标返回

int SLFind(SL* ps, SQL x)
{
	assert(ps);
	for (int i = 0; i < ps->size; i++)
	{
		if (ps->arr[i] == x)
		{
			return i;
		}
		
	}
		return -1;//返回一个无效的值
};

然后我们就可以在测试函数中判断是否找到了指定的元素


总结

以上就是有关顺序表查找删除的所有内容,实现顺序表的构建其实非常简单,大家从这几个方面理解原理即可

  • 5
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
顺序是一种线性数据结构,可以用数组实现。在顺序插入元素,可以通过将插入位置后面的元素依次后移,然后将要插入的元素放入指定位置删除元素也类似,将删除位置后面的元素依次前移,覆盖要删除的元素。查找指定元素可以遍历整个顺序,找到匹配的元素即可。合并两个顺序可以将两个顺序的元素依次复制到一个新的顺序中。 以下是一个简单的顺序实现: ```lua -- 创建一个顺序 function createList() local list = {} return list end -- 在指定位置插入元素 function insert(list, pos, value) for i = #list, pos, -1 do list[i+1] = list[i] end list[pos] = value end -- 删除指定位置的元素 function remove(list, pos) for i = pos, #list-1 do list[i] = list[i+1] end list[#list] = nil end -- 查找指定元素 function search(list, value) for i = 1, #list do if list[i] == value then return i end end return -1 end -- 合并两个顺序 function merge(list1, list2) local newList = {} for i = 1, #list1 do newList[i] = list1[i] end for i = 1, #list2 do newList[#newList+1] = list2[i] end return newList end ``` 关于中文加密,这是一个比较广泛的话题,有很多种加密方式,比如替换、移位、置换等。常见的中文加密方式有“凯撒密码”、“栅栏密码”、“仿射密码”等。这些加密方式都可以用程序实现,具体实现方法可以根据不同的加密方式进行选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值