[Ejercicio de estructura de datos] Eliminación de intervalos (PTA) de elementos de tablas lineales

Exigir:

Dada una tabla lineal almacenada secuencialmente, diseñe una función para eliminar todos los elementos cuyo valor sea mayor que el mínimo y menor que el máximo. Después de la eliminación, los elementos restantes de la tabla se almacenan en orden y la posición relativa no se puede cambiar.

Definición de interfaz de función:

List Delete( List L, ElementType minD, ElementType maxD );

donde la Listestructura se define de la siguiente manera:

typedef int Position;
typedef struct LNode *List;
struct LNode {
    
    
    ElementType Data[MAXSIZE];
    Position Last; /* 保存线性表中最后一个元素的位置 */
};

LEs una tabla lineal pasada por el usuario, en la que los ElementTypeelementos se pueden comparar por >, ==, <; minDy maxDlos límites inferior y superior del rango de valores del elemento a eliminar, respectivamente. La función Deletedebe eliminar Data[]todos los elementos cuyos valores son mayores minDy menores maxDque los de la tabla, y al mismo tiempo asegurarse de que los elementos restantes de la tabla se almacenen en orden, y la posición relativa permanezca sin cambios, y finalmente regresa la tabla después de la eliminación.

Ejemplo del procedimiento de prueba del árbitro:

#include <stdio.h>

#define MAXSIZE 20
typedef int ElementType;

typedef int Position;
typedef struct LNode *List;
struct LNode {
    
    
    ElementType Data[MAXSIZE];
    Position Last; /* 保存线性表中最后一个元素的位置 */
};

List ReadInput(); /* 裁判实现,细节不表。元素从下标0开始存储 */
void PrintList( List L ); /* 裁判实现,细节不表 */
List Delete( List L, ElementType minD, ElementType maxD );

int main()
{
    
    
    List L;
    ElementType minD, maxD;
    int i;

    L = ReadInput();
    scanf("%d %d", &minD, &maxD);
    L = Delete( L, minD, maxD );
    PrintList( L );

    return 0;
}

/* 你的代码将被嵌在这里 */

Muestra de entrada:

10
4 -8 2 12 1 5 9 3 3 10
0 4

Salida de muestra:

4 -8 12 5 9 10 

código

Solo ahora me di cuenta de que puedo resolver problemas de funciones sin preocuparme por la implementación de funciones que no sean los requisitos. Perdí mucho tiempo en esto antes, y es mucho más fácil enviar funciones directamente, lo cual es estúpido. . .

/*
 * @Description : 删除区间元素
 * @param  -L   : 需要删除的链表
 * @param -minD : 下边界
 * @param -maxD : 上边界
 * @return 		: 删除后的元素
 */
List Delete( List L, ElementType minD, ElementType maxD )
{
    
    
    int n = 0;
    for (int i = 0; i <= L->Last; i++){
    
    
        if (L->Data[i] > minD && L->Data[i] < maxD){
    
    
            //得出需要删除的个数
            n++;
        }
        else{
    
    
            //非区间内的保持,区间内的删除
            L->Data[i - n] = L->Data[i];
        }
    }
    L->Last = L->Last - n;
    return L;
}

Supongo que te gusta

Origin blog.csdn.net/qq_45628620/article/details/114804338
Recomendado
Clasificación