对顺序表的两个操作

来源:互联网 发布:医疗数据分析师 编辑:程序博客网 时间:2024/05/22 06:13

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


/*本文档实现两个基本的操作:去除非降序顺序表中的重复的元素、根据给定的范围删除顺序表中的元素,空间复杂度为O(1)*/#include<iostream>#define arrsize 1000using 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;}

是不是很像。。。