对顺序表的两个操作

今天帮老师判数据结构作业,有两个顺序表的题目感觉很有意思,同时又感觉这两个题都很像,因此就写成代码试了一下,虽然不难,但是也很有启发。题目要求是删除一个非降序顺序表中所有的重复元素,并且使空间复杂度为O(1).另一个题目是删除顺序表中值的范围在[x,y]之间的所有数,这个顺序表可以是乱序的,但是也要求算法空间复杂度为O(1).代码如下:


/*本文档实现两个基本的操作:去除非降序顺序表中的重复的元素、根据给定的范围删除顺序表中的元素,空间复杂度为O(1)
*/
#include<iostream>
#define arrsize 1000
using namespace std;
struct SqList{
	int data[arrsize];
	int element;
	SqList()
	{
		element=-1;
	}
};
void out(SqList s)
{
	for(int i=0;i<=s.element;i++)
	{
		cout<<s.data[i]<<"  ";
	}
	cout<<endl;
}
void remove(SqList *s)  //去除非降序顺序表中的重复元素
{
	if(s->element==-1)
		return ;
	int i=0,j;
	for(int j=1;j<=s->element;j++)
	{
		if(s->data[j]!=s->data[i])
		{
			i++; s->data[i]=s->data[j];
		}
	}
	s->element=i;
}
void remove_val(SqList *s,int x,int y) // 删除数组中,值的范围在[x,y]中间的数。要求x<=y
{
	if(s->element==-1)  return ;
	int i=-1,j;
	for(int j=0;j<=s->element;j++)
	{
		if(s->data[j]<x || s->data[j]>y)
		{
			i++;s->data[i]=s->data[j];
		}
	}
	s->element=i;
}
int main(int argc, char const *argv[])
{
	SqList s;
	int num[10]={3,3,4,5,9,9,9,10,15,15};//定义一个升序数组
	for(int i=0;i<10;i++)
	{
		s.data[i]=num[i];  s.element++; //将num数组的值赋给s
	}
	out(s);//先输出s,结果为{3,3,4,5,9,9,9,10,15,15}
	remove(&s);
	out(s);//输出s,结果为{3,4,5,9,10,15}

	SqList sq;
	int num2[10]={15,13,4,5,9,8,9,10,7,15};//定义一个升序数组
	for(int i=0;i<10;i++)
	{
		sq.data[i]=num2[i];  sq.element++; //将num数组的值赋给s
	}
	out(sq);
	remove_val(&sq,4,9);
	out(sq);
	return 0;
}

是不是很像。。。


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值