【数据结构】顺序表之增删查改操作(C语言)

目录

1.头部插入(SLpushfront)

2.尾部删除(SLpopback)

3.头部删除(SLpopfront)

4.指定位置插入数据(SListInsert)

5.指定位置删除数据(SLdelete)

6.查找数据(SLFind)

7.修改数据(SLModify)


1.头部插入(SLpushfront)

插入前我们调用容量检测函数对容量进行检测,函数内部已经写好了增容的程序。

void SLpushfront(SL* psl, SLDatatpye x)//头插
{
	SLCheckCapacity(psl);//检查容量
	int end = psl->size - 1;
	while (end>=0)//把数组每个往后挪动一位
	{
		psl->a[end + 1] = psl->a[end];
		end--;
	}
	psl->a[0] = x;
	psl->size++;
	printf("插入完毕!\n");
}

 那么插入数据就要挪动数据,尾插是从前向后挪动数据,那么头部插入就是从后向前挪动数据,也就是开辟空间后,将新添加的数据从顺序表头部向前移动。

2.尾部删除(SLpopback)

我们直接将size所再的位置减1即可,因为size被我们所定义的意义是有效数据的个数,将有效数据个数减一,也就是说将整个顺序表的最后一个数据丢掉,就可以达到尾部删除的效果。

void SLpopback(SL* psl)//尾删
{
	assert(psl->size > 0);//判断是否为空成员
	psl->size--;//直接减size,就无法访问到最后一个数据
}

3.头部删除(SLpopfront)

顾名思义就是从头开始删除数据,我们不妨定义一个变量start为顺序表第一个位置。

我们知道了size和start的意义,删除数据无非就是将数据进行挪动将已有的数据覆盖,所以我们要确定start最终所挪动的位置。

我们用图例展示

可以看到如果start<size时,start最后的位置会在“0”的位置,当这个顺序表被填满时size就已经越界访问了,所以我们要使start落在size-1的位置。

void SLpopfront(SL* psl)//头删
{
	assert(psl->size > 0);//判断是否为空成员
	for (int i = 0; i < psl->size; i++)
	{
		psl->a[i] = psl->a[i + 1];
	}
	psl->size--;
}

4.指定位置插入数据(SListInsert)

void SListInsert(SL* psl, int pos, SLDatatpye x)//给下标位置插入
{
	SLCheckCapacity(psl);
	assert(pos <= psl->size - 1 && pos >= 0);
	int end = psl->size - 1;
	while (end >= pos)
	{
		psl->a[end + 1] = psl->a[end];
		end--;
	}
	psl->a[pos] = x;
	psl->size++;
}

注意:

1.pos 位置要合法,0<= pos <= size;

2.依旧是从后往前覆盖;

3.如果pos = size 就是尾插,pos = 0 就是头插。

5.指定位置删除数据(SLdelete)

 同样的在删除数据之前我们需要进行判断一面越界访问,接下来的操作和其他的删除基本一样不再过多赘述

void SLdelete(SL* psl, int pos)//给下标位置删除
{
	assert(pos < psl->size&& pos >= 0);//防止越界访问
	int n = psl->size - 1 - pos;
	for (int i = 0; i < n; i++)
	{
		psl->a[pos + i] = psl->a[pos + i + 1];
	}
	psl->size--;

}

6.查找数据(SLFind)

约定:找到返回下标,没找到返回 -1。

遍历数组就可以完成操作。


int SLFind(SL* psl, SLDatatype x)//查找数据
{
	int i = 0;
	for (i = 0; i < psl->size; i++)
	{
		if (psl->a[i] == x)
		{
			return x;
		}
	}
	return -1;
}

7.修改数据(SLModify)

修改数据也非常的简单,我们的目的就是将一个数据换成我们想要的数据即可


void SLModify(SL* psl, int pos, SLDatatype x)//修改数据
{
	assert(0 <= pos && pos <= psl->size);
	psl->a[pos] = x;
}

结束语:以上就是顺序表增删查改的操作详解,如果对你有所帮助,还请三连支持,感谢您的阅读!

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值