6-4 顺序表区间删除
分数 7
作者 ZXM
单位 西南石油大学
给定一个顺序存储的线性表,请设计一个函数删除所有值小于min和值大于max的元素。删除后表中剩余元素保持顺序存储,并且相对位置不能改变。
函数接口定义:
void Delete( List &L, ElementType minD, ElementType maxD );
L是用户传入的一个线性表,其中ElementType元素可以通过>、==、<进行比较。函数Delete应将Data[]中所有值小于minD和值大于maxD的元素删除,同时保证表中剩余元素保持顺序存储,并且相对位置不变,返回删除后的表。
裁判测试程序样例:
#include <stdio.h>
#define MAXSIZE 20
typedef int ElementType;
typedef int Position;
struct LNode {
ElementType Data[MAXSIZE];
Position last; /* 线性表的长度*/
};
typedef struct LNode List;
void Delete( List &L, ElementType minD, ElementType maxD );
List ReadInput()
{
List L;
int num,i,temp;
scanf("%d",&num);
for(i=0;i<num;i++)
{
scanf("%d",&(L.Data[i]));
}
L.last = num-1;
return L;
}
void PrintList( List L )
{
for(int i=0;i<=L.last;i++)
{
printf("%d ",L.Data[i]);
}
}
int main()
{
List L;
ElementType minD, maxD;
int i;
L = ReadInput();
scanf("%d %d", &minD, &maxD);
Delete( L, minD, maxD );
PrintList( L );
return 0;
}
/* 你的代码将被嵌在这里 */
输入样例:
在这里给出一组输入。例如:
10
4 -8 2 12 1 5 9 3 3 10
0 4
输出样例:
在这里给出相应的输出。例如:
4 2 1 3 3
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
我的答案:提交后是 全在删除范围内这一项运行超时,应该怎么修改这个答案呢?
void Delete(List &L, ElementType minD, ElementType maxD ){
int i=0;
int j;
int count=0;
for(i=0;i<L.last+1;i++){
while(L.Data[i]>maxD||L.Data[i]<minD){
count++;
for(j=i;j<L.last;j++){
L.Data[j]=L.Data[j+1];
}
L.last--;
i=0;
}
if(count==L.last){
L.last=0;
}
}
}