习题3.3 线性表元素的区间删除 (20 分)
给定一个顺序存储的线性表,请设计一个函数删除所有值大于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 )
{
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-5 线性表元素的区间删除 (20 分)
题目: 给定一个顺序存储的线性表,请设计一个函数删除所有值大于min而且小于max的元素.删除后表中剩余元素保持顺序存储,并且相对位置不能改变. 函数接口定义: List Delete( List L ...
- 6-1 线性表元素的区间删除 (10 分)
** 6-1 线性表元素的区间删除 (10 分) ** 给定一个顺序存储的线性表,请设计一个函数删除所有值大于min而且小于max的元素.删除后表中剩余元素保持顺序存储,并且相对位置不能改变. 函数接 ...
- 6-2 线性表元素的区间删除
给定一个顺序存储的线性表,请设计一个函数删除所有值大于min而且小于max的元素.删除后表中剩余元素保持顺序存储,并且相对位置不能改变. 函数接口定义: List Delete( List L, El ...
- 1-4 数组元素的区间删除 (20 分)
题目: 给定一个顺序存储的线性表,请设计一个函数删除所有值大于min而且小于max的元素.删除后表中剩余元素保持顺序存储,并且相对位置不能改变. 函数接口定义: int Delete( int A[] ...
- 线性表元素的区间删除
裁判测试程序样例: 解法一: 时间复杂度为O(n^2) 1 //O(n^2)算法 2 List Delete( List L, ElementType minD, ElementType maxD ...
- 6-1 数组元素的区间删除
6-1 数组元素的区间删除 (20 分) 给定一个顺序存储的线性表,请设计一个函数删除所有值大于min而且小于max的元素.删除后表中剩余元素保持顺序存储,并且相对位置不能改变. 函数接口定义: in ...
- java中线性表删除元素和删除指定元素_线性表的插入和删除(Java版)
1.线性表的定义: (1).线性表是一种可以在任意位置插入和删除数据元素操作.由n(n≥0)个相同类型数据元素a0, a1,-, an-1组成的线性结构.除了第一个元素没有前驱元素和最后一个元素没有后 ...
- PTA:6-8 数组元素的区间删除 (20 分)
大一下半期数据结构 数据结构题目集 数组元素的区间删除 (20 分) 给定一个顺序存储的线性表,请设计一个函数删除所有值大于min而且小于max的元素.删除后表中剩余元素保持顺序存储,并且相对位置不能 ...
- 折半查找和线性表的插入与删除实验
学号 姓名 博客名 2103101018 罗玛 桃花岛-戌时 题目:折半 ...
最新文章
- 开源|如何开发一个高性能的redis cluster proxy?
- 通过串口打印--超声波测距模块测得距离
- TransactionScope和分布式事务的注意点
- 吴恩达机器学习3——逻辑回归、正则化
- 公平锁非公平锁的实际使用_面经手册 · 第16篇《码农会锁,ReentrantLock之公平锁讲解和实现》...
- 社区发现(五)--BP(信念传播算法)
- 消息队列中间件的技术选型分析
- 购物搜索引擎架构的变与不变
- html中给select下拉框赋值
- 这些神奇的 QQ 你还记得几个?
- jieba 使用笔记
- 2021-08-23
- 企业级服务器固态硬盘,企业级硬盘和固态硬盘有什么区别
- 知识直播的“顶流”,正在被复制
- 汽车零部件行业需求分析及解决方案
- animite cc html5项目,Animate CC HTML5/Canvas使用actionscript控制嵌套的MovieClip時間軸
- Binary_Search(二叉树搜索---------二分)
- leetcode 1647
- 用传统流程图表示求解以下问题的算法有两个瓶子A和B
- 「镁客·请讲」禾赛科技李一帆:定位激光雷达整体方案解决商,填补国内市场空白...
热门文章
- 银辉给园子里的兄弟姐妹们拜年啦
- cf1107e uva10559区间dp升维
- Python 检测系统时间,k8s版本,redis集群,etcd,mysql,ceph,kafka
- P4838 P哥破解密码
- [GO]无缓冲通道(unbuffered channel)
- 小项目也可以学习到很多东西
- C语言可变参数函数的使用及相关函数介绍
- PHP创建与解析 XML 1 (36)
- NSArray 所有基础点示例
- 由几个月前写的(验证码利用ashx一般处理程序来做),修改为不用以一般处理程序...