6-1 线性表元素的区间删除 (20 分)

  • Post author:
  • Post category:其他


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

函数接口定义:

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

其中List结构定义如下:

typedef int Position;

typedef struct LNode

List;

struct LNode {


ElementType Data[MAXSIZE];

Position Last; /

保存线性表中最后一个元素的位置 */

};

L是用户传入的一个线性表,其中ElementType元素可以通过>、==、<进行比较;minD和maxD分别为待删除元素的值域的下、上界。函数Delete应将Data[]中所有值大于minD而且小于maxD的元素删除,同时保证表中剩余元素保持顺序存储,并且相对位置不变,最后返回删除后的表。



裁判测试程序样例:

#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; }

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



输入样例:

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




输出样例:

4 -8 12 5 9 10

List Delete( List L, ElementType minD, ElementType maxD ){
  for( int p=0,int n=0;n<=L->Last;n++){
    if(L->Data[n]<=minD||L->Data[n]>=maxD){
      L->Data[p++]=L->Data[n];
    }
  }
  L->Last=p-1;
  return L;
}



版权声明:本文为qq_43250273原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。