线性表 查找 在指定范围内 并删除的代码

来源:百度知道 编辑:互助问答吧 时间:2020/06/04 06:42:14
以较高的效率实现删除指定范围内的数据。

线性表存储数据如下:
{2,5,15,30,1,40,17,50,9,21,32,8,41,22,49,31,33,18,50,5}

要求删除的数据:10~30之间的所有元素(包括10和30)

20分求高手给个代码,在线等,急急急急!
问题还没有说明白啊,不要使用数组。。 要求使用单链表进行操作。数组做我已经写了七八个符合要求的程序了。链表的还在编译当中。 而且要注意那一句话:以较高效率!!数组一个一个的比较是不是有点浪费时间,搞的时间复杂度很高耶。有没有更简便的方法啊??
提供悬赏,以引起关注度。

#include <stdio.h>

int main(void)
{
int data[] = {2,5,15,30,1,40,17,50,9,21,32,8,41,22,49,31,33,18,50,5} ;
int newdata[30];
int i,j=0;

for(i = 0;i <sizeof(data);i++)
{
if(data[i]>=10&&data[i]<=30)
{
continue;
}
else
{
newdata[j] = data[i];
j++
}
}
for (i = 0;i < j; i++)
{
printf("%d",newdata[i]);
}
getchar();return 0;
}

对于链表中的每一个数据依次进行比较,如果是10-30之间,删除之,直至链表遍历完毕
时间复杂度是线性的,应该不是很高
想要源代码也可以,请将你现在编写的代码发给我,我帮你改。

for(i=0;i<sizeof(a)/2;i++) sizeof(a)表示a占字符数sizeof(a)/2表示有多少个数因为int占2个字符所以/2就=a中的数的个数;
if(a[i]>30||a[i]<10)
printf("%d\t",a[i]);表示当a[i]>30或者a[i]<10时不输出也就是册除30以下的包括30;10以上包括10;

main()
{
int a[]={2,5,15,30,1,40,17,50,9,21,32,8,41,22,49,31,33,18,50,5},i;
system("cls");
for(i=0;i<sizeof(a)/2;i++)
{if(a[i]>30||a[i]<10)
printf("%d\t",a[i]);
}
getch();
}

#include<stdio.h>
#include<string.h>
main() {
int L, R;
scanf("%d %d", &L, &R);
int a[100], n, i;
scanf("%d", &n);
for (i=0;i<n;++i) scanf("%d", a+i);
memmove(a+L, a+R+1, (n-R-1)*sizeof(int));
n -= (R-L+1);
}