给定一个顺序存储的线性表, 请设计一个函数删除所有值大于 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 ){
- ElementType *d=L->Data;
- Position n=L->Last;
- int j=0;
- for(int i=0;i<=n;i++){
- if(d[i]<=minD||d[i]>=maxD){
- d[j]=d[i];
- j++;
- }
- }
- L->Last=j-1;
- return L;
- }
来源: http://www.bubuko.com/infodetail-3303880.html