删除顺序表中所有的的重复数据

顺序表的结果设计如下所示

顺序表的结构体设计和头节点的结构体设计如下链接:

顺序表的插入_神厨小福贵!的博客-CSDN博客按位置插入我们知道 顺序表的特点就是 无论在逻辑上还是地址上都是连续的先看顺序表的结构体:#define MAXSIZE 10 //顺序表一般固定大小struct SeqList{ int data[MAXSIZE]; int capacity; //顺序表容量大小 int cursize; //顺序表中有效数据节点个数}SeqList , *PSeqList; //结构体指针和结构体别名再来看结构体的数据按位置插入:bool In...https://blog.csdn.net/qq_45829112/article/details/120863218

来看这个思路分析:

 来看代码实现:

void Reamove_all(PSeqList plist, int val)  //val就是要再顺序表中删除的数据
{
	assert(plist != NULL);
	int j = 0;
	for (int i = 1; i < plist->cursize; i++)
	{
		if (plist->data[i] != val)
		{
			j++;
			plist->data[j] = plist->data[i];
		}
	}
    plist->cursize = j + 1;
}

对于上述代码  如果顺序表首个数据是 12  呢  这样的话按照上面的的代码  第一个数据就会被跳过  导致最后结果达不到预期效果

对此  代码该怎么改呢?

方法一:

 

代码的话  改一下i  j的初值就好:

void Reamove_all(PSeqList plist, int val)  //val就是要再顺序表中删除的数据
{
	assert(plist != NULL);
	int j = -1;
	for (int i = 0; i < plist->cursize; i++)
	{
		if (plist->data[i] != val)
		{
			j++;
			plist->data[j] = plist->data[i];
		}
	}
    plist->cursize = j + 1;
}

方法二:

 代码实现:

void Reamove_all(PSeqList plist, int val)  //val就是要再顺序表中删除的数据
{
	assert(plist != NULL);
	int j = 0;
	for (int i = 0; i < plist->cursize; i++)
	{
		if (plist->data[i] != val)
		{
            plist->data[j] = plist->data[i];
			j++;
		}
	}
    plist->cursize = j;
}

“读书,买花,长大”

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值