Problem Description
设计一个算法,删除顺序表中区间 [s, t) 内的元素,使得表中所有元素的值均不在给定区间内。其中顺序表的动态分配用C语言描述如下:
#define InitSize 100 //表长度的初始定义 typedef int DataType; //定义表元素的数据类型 typedef struct { //顺序表的定义 DataType *data; //指示动态分配数组的指针 int maxSize, n; //数组中最大容量和当前个数 }SeqList;
Input Description
有多组测试数据,在每组测试数据的第一行输入顺序表中元素的个数 n;如果n不为0,第二行输入n 个数,用空格隔开;第三行输入两个数,分别表示 s 和 t 的值,用空格隔开。
Output Description
如果n为0,输出 EMPTY;
如果n不为0,但 s 和 t 的值非法,输出 ERROR;
其他情况,输出删除后顺序表中元素的值。
Sample Input
8 -6 3 -5 -2 12 10 1 19 -5 10 0 5 1 2 3 4 5 3 2 6 -3 8 -1 5 13 7 -3 15
Sample Output
-6 12 10 19 EMPTY ERROR EMPTY
Hint
1. 注意区间为 [s, t)。
2. 注意输出的格式:换行或空格。
#include<stdio.h>
struct node//创建顺序表
{
int data[200];
int length;
}La,Lb;//la用来读入,lb用来存储
int main()
{
int n;
while(~scanf("%d",&n))//循环输入
{
if(n==0)
{
printf("EMPTY\n");
continue;
}
else
{
int i,j=0;
for(i=0;i<n;i++)
{
scanf("%d",&La.data[i]);
}
La.length=n;//将la赋值为n,lb为0
Lb.length=0;
int s,t;
scanf("%d %d",&s,&t);
if(s>=t)//s大于和等于t都是非法的
{
printf("ERROR\n");
continue;
}
for(i=0;i<n;i++)
{
if(La.data[i]<s||La.data[i]>=t)//将区间以外的放入lb
{
Lb.data[j]=La.data[i];
Lb.length++;
j++;
}
}
if(Lb.length==0)//如果区间过大没有元素了,也输出EMPTY
{
printf("EMPTY\n");
}
else
{
for(i=0;i<Lb.length;i++)
{
printf("%d ",Lb.data[i]);
}
printf("\n");
}
}
int k=0;
for(k;k<200;k++)//刷新
{
La.data[k]=0;
Lb.data[k]=0;
}
}
}