Submit: 14 Solved: 5
[Submit][Status][Web Board]
Description
若一个线性表L采用顺序存储结构,其中元素都为整数。设计一个算法,删除元素值在[x,y]之间的所有元素,要求算法的时间复杂度为O(n),空间复杂度为O(1).
顺序表定义为:
需编写的算法为:
bool Delete(SqList *&L,ElemType x,ElemType y);
注意:只需提交删除区间内元素的算法Delete部分。
Input
输入的第一行代表线性表的长度n,n<=SizeMax。第二行输入n个元素并插入到线性表中,第三行输入两个整数x,y,确定区间。
Output
输出的数据占两行,第一行是删除之后线性表的长度length,接下来的一行是线性表中的每个元素。
Sample Input
10
5 3 6 2 1 9 8 7 4 0
3 7
Sample Output
5
2 1 9 8 0
HINT
1、请使用C++编译并提交
2、只需提交删除区间内元素算法的部分
3、注意区间端点值是否合理
#include<stdio.h>
#include<stdlib.h>
#define SizeMax 200
typedef int ElemType;
typedef struct
{
ElemType data[SizeMax];
int length;
} SqList;
void CreatelistR(SqList *&L,ElemType a[],int n)
{
int i;
L=(SqList *)malloc(sizeof(SqList));
for(i=0;i<n;i++)
L->data[i]=a[i];
L->length=n;
}
bool Delete(SqList *&L,ElemType x,ElemType y)
{
int k=0,i;
if(x>y)return false;
for(i=0;i<L->length;i++)
{
if(L->data[i]<x||L->data[i]>y)
{
L->data[k]=L->data[i];
k++;
}
}
L->length=k;
return true;
}
void OutputList(SqList *&L)
{
int i;
printf("%d\n",L->length);
for(i=0;i<L->length;i++)
printf("%d ",L->data[i]);
}
int main()
{
int n,a[SizeMax],x,y;
int i;
SqList *p;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
scanf("%d %d",&x,&y);
CreatelistR(p,a,n);
Delete( p, x, y);
OutputList(p);
}