给定一个顺序存储的线性表,请设计一个函数删除所有值大于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元素可以通过>、==、<进行比较;minDmaxD分别为待删除元素的值域的下、上界。函数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 )

{

int i,j;

for( i=0; i <= L->Last; i++ )

{

if( L->Data[i] > minD && L->Data[i] < maxD )

{

for(j = i; j <= L->Last - 1; j++ )

{

L->Data[j] = L->Data[j + 1];

}

L->Last--;

i--;

}

}

return L;

}

方法二:

那么有没有别的办法来避免老是移来移去呢,请看代码2

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

{

int i,count = 0;

for( i=0; i <= L->Last; i++ )

{

if( L->Data[i] > minD && L->Data[i] < maxD )

{

count++;

}

else

{

L->Data[ i - count ] = L->Data[i];

}

}

L->Last = L->Last - count;

return L;

}

习题3.3 线性表元素的区间删除 (20 分)相关推荐

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

    题目: 给定一个顺序存储的线性表,请设计一个函数删除所有值大于min而且小于max的元素.删除后表中剩余元素保持顺序存储,并且相对位置不能改变. 函数接口定义: List Delete( List L ...

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

    ** 6-1 线性表元素的区间删除 (10 分) ** 给定一个顺序存储的线性表,请设计一个函数删除所有值大于min而且小于max的元素.删除后表中剩余元素保持顺序存储,并且相对位置不能改变. 函数接 ...

  3. 6-2 线性表元素的区间删除

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

  4. 1-4 数组元素的区间删除 (20 分)

    题目: 给定一个顺序存储的线性表,请设计一个函数删除所有值大于min而且小于max的元素.删除后表中剩余元素保持顺序存储,并且相对位置不能改变. 函数接口定义: int Delete( int A[] ...

  5. 线性表元素的区间删除

    裁判测试程序样例: 解法一:  时间复杂度为O(n^2) 1 //O(n^2)算法 2 List Delete( List L, ElementType minD, ElementType maxD ...

  6. 6-1 数组元素的区间删除

    6-1 数组元素的区间删除 (20 分) 给定一个顺序存储的线性表,请设计一个函数删除所有值大于min而且小于max的元素.删除后表中剩余元素保持顺序存储,并且相对位置不能改变. 函数接口定义: in ...

  7. java中线性表删除元素和删除指定元素_线性表的插入和删除(Java版)

    1.线性表的定义: (1).线性表是一种可以在任意位置插入和删除数据元素操作.由n(n≥0)个相同类型数据元素a0, a1,-, an-1组成的线性结构.除了第一个元素没有前驱元素和最后一个元素没有后 ...

  8. PTA:6-8 数组元素的区间删除 (20 分)

    大一下半期数据结构 数据结构题目集 数组元素的区间删除 (20 分) 给定一个顺序存储的线性表,请设计一个函数删除所有值大于min而且小于max的元素.删除后表中剩余元素保持顺序存储,并且相对位置不能 ...

  9. 折半查找和线性表的插入与删除实验

    学号                     姓名                   博客名 2103101018         罗玛                   桃花岛-戌时 题目:折半 ...

最新文章

  1. 开源|如何开发一个高性能的redis cluster proxy?
  2. 通过串口打印--超声波测距模块测得距离
  3. TransactionScope和分布式事务的注意点
  4. 吴恩达机器学习3——逻辑回归、正则化
  5. 公平锁非公平锁的实际使用_面经手册 · 第16篇《码农会锁,ReentrantLock之公平锁讲解和实现》...
  6. 社区发现(五)--BP(信念传播算法)
  7. 消息队列中间件的技术选型分析
  8. 购物搜索引擎架构的变与不变
  9. html中给select下拉框赋值
  10. 这些神奇的 QQ 你还记得几个?
  11. jieba 使用笔记
  12. 2021-08-23
  13. 企业级服务器固态硬盘,企业级硬盘和固态硬盘有什么区别
  14. 知识直播的“顶流”,正在被复制
  15. 汽车零部件行业需求分析及解决方案
  16. animite cc html5项目,Animate CC HTML5/Canvas使用actionscript控制嵌套的MovieClip時間軸
  17. Binary_Search(二叉树搜索---------二分)
  18. leetcode 1647
  19. 用传统流程图表示求解以下问题的算法有两个瓶子A和B
  20. 「镁客·请讲」禾赛科技李一帆:定位激光雷达整体方案解决商,填补国内市场空白...

热门文章

  1. 银辉给园子里的兄弟姐妹们拜年啦
  2. cf1107e uva10559区间dp升维
  3. Python 检测系统时间,k8s版本,redis集群,etcd,mysql,ceph,kafka
  4. P4838 P哥破解密码
  5. [GO]无缓冲通道(unbuffered channel)
  6. 小项目也可以学习到很多东西
  7. C语言可变参数函数的使用及相关函数介绍
  8. PHP创建与解析 XML 1 (36)
  9. NSArray 所有基础点示例
  10. 由几个月前写的(验证码利用ashx一般处理程序来做),修改为不用以一般处理程序...