关于#Delete#的问题,如何解决?

给定一个顺序存储的线性表,请设计一个函数删除所有值大于min而且小于max的元素。删除后表中剩余元素保持顺序存储,并且相对位置不能改变。

函数接口定义:

int Delete( int A[], int L, int minA, int maxA );

其中A是整型数组,存储原始线性表的元素;L是表长,即A中元素的个数;minA和maxA分别为待删除元素的值域的下、上界。函数Delete应将A中所有值大于minA而且小于maxA的元素删除,同时保证表中剩余元素保持顺序存储,并且相对位置不变,最后返回删除后的表长


#include 
#define MAXN 20
int Delete( int A[], int L, int minA, int maxA );
int main()
{
    int A[MAXN], L, minA, maxA, i;

    scanf("%d", &L);
    for (i=0; i"%d", &A[i]);
    scanf("%d %d", &minA, &maxA);
    L = Delete(A, L, minA, maxA);
    for (i=0; i"%d ", A[i]);
    printf("\n");
    return 0;
}
int Delete( int A[], int L, int minA, int maxA )
{
    int i=0,j,k,d;
    while(i[i]while(j[j]if(d==0)
        return 0;
    else
    {
        for(k=j;k[k-d]=A[k];
    }
    L=L-d;
}

运行不出来,求指正。

i是小于min的索引
j是小于max的索引
如果j和i相等,说明min和max相等,那就不应该删表
表长度不变才对,你return 0是几个意思?
后面应该从i到j之间的删掉,你循环k=j又是要干啥

修改如下,改动处见注释,供参考:

#include <stdio.h>
#define MAXN 20
int Delete(int A[], int L, int minA, int maxA);
int main()
{
    int A[MAXN], L, minA, maxA, i;

    scanf("%d", &L);
    for (i = 0; i < L; i++) scanf("%d", &A[i]);
    scanf("%d %d", &minA, &maxA);
    L = Delete(A, L, minA, maxA);
    for (i = 0; i < L; i++)
        printf("%d ", A[i]);
    printf("\n");
    return 0;
}
int Delete(int A[], int L, int minA, int maxA)
{
    int i = 0, j, k, d;
    while (i < L && A[i] <= minA)//while (i < L && A[i] < minA) 修改
        i++;
    j = i;
    while (j < L && A[j] < maxA)
        j++;
    d = j - i;
    if (d != 0)  // 修改
    {
        while (j < L)//for (k = j; k < L; k++)  修改
            A[i++] = A[j++];   // 修改
        L -= d; //L = L - d;
    }
    return L;  //return 0; 修改
}