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 List
estructura se define de la siguiente manera:
typedef int Position;
typedef struct LNode *List;
struct LNode {
ElementType Data[MAXSIZE];
Position Last; /* 保存线性表中最后一个元素的位置 */
};
L
Es una tabla lineal pasada por el usuario, en la que los ElementType
elementos se pueden comparar por >, ==, <; minD
y maxD
los límites inferior y superior del rango de valores del elemento a eliminar, respectivamente. La función Delete
debe eliminar Data[]
todos los elementos cuyos valores son mayores minD
y menores maxD
que 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;
}