题目:

给定一个顺序存储的线性表,请设计一个函数删除所有值大于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,k,h=MAXSIZE;for(i=0;i<h;i++){if(L->Data[i]>minD&&L->Data[i]<maxD){for(k=i;k<h;k++){L->Data[k]=L->Data[k+1]; }h--;}}L->Last=L->Data+h-1;return L;
}

跟之前的那个题一样也是向前移动,还不知道具体错因。
1-4 数组元素的区间删除 (20 分)
https://blog.csdn.net/BQDQSZ/article/details/100164636

struct LNode {ElementType Data[MAXSIZE];Position Last; /* 保存线性表中最后一个元素的位置 */
};

这个结构体包含了一个int数组和一个整数;

typedef struct LNode *List;
List L;

这两句又表明这道题中是想让你用结构体指针L来访问结构体成员:int数组。
1-4 数组元素的区间删除 ,借助了一个新数组。这里就直接用一个新的结构体,然后返回他的地址给L即可。

但是改完后还是不对,费解。

List Delete( List L, ElementType minD, ElementType maxD )
{struct LNode b;int k=0 ;for(int i=0;i< MAXSIZE;i++){if(L->Data[i]<=minD||L->Data[i]>=maxD){b.Data[k]=L->Data[i];k++;     }}b.Last=k-1;return (&b);//错误,函数调用完成后,&b所指的那块存储空间已经物是人非了!!!!!!!!
}
我找到错因了,和之前的某道题一样:忘了局部变量在函数调用完成后就不存在了,所以返回的地址不是指向结构体的。应该使用动态分配。

修改后(20分):

List Delete( List L, ElementType minD, ElementType maxD )
{struct LNode *B;B=(struct LNode *)malloc(sizeof(struct LNode ));//!!!!!!!!!int i,k=0 ;for( i=0;i<=L->Last;i++){if(L->Data[i]<=minD||L->Data[i]>=maxD){B->Data[k]=L->Data[i];k++;     }}B->Last=k-1;return (B);
}

还有这种思路我想不到(正确答案):

List Delete( List L, ElementType minD, ElementType maxD )
{int i,count=0;for(i=0;i<=L->Last;i++){if(L->Data[i]<maxD&&L->Data[i]>minD)//若当前元素在区间内,count+1 count++;elseL->Data[i-count]=L->Data[i];/*若当前元素不在区间内,把当前元素向前移动count单位,并替换Data[i-count]*/ }L->Last=L->Last-count;return L;
}

1-5 线性表元素的区间删除 (20 分)相关推荐

  1. 习题3.3 线性表元素的区间删除 (20 分)

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

  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. java swt窗口,SWT Java:如何防止窗口调整大小?
  2. 通过FTP4J 实现 FTPS 连接
  3. vue截取一个字符串_vue 截取字符串
  4. c++ mysql 操作_c++操作mysql入门详解
  5. sql 基本操作语句笔记
  6. EtherCAT主站SOEM函数详解----SDO读写函数
  7. 塔菲克蓝牙适配器驱动_TAFIQ蓝牙适配器驱动下载|TAFIQ蓝牙适配器驱动 v4.0 最新免费版 下载 - 巴士下载站...
  8. 华为电脑和手机一碰传_华为手机怎么一碰传文件到电脑教程
  9. 深入浅出CNN-经典总结(2019中秋)
  10. QT 读BIN文件的两种方式
  11. 小程序快递单号查询接口物流助手对接指南
  12. 使用mplayer做影片预览图
  13. 睡眠健康与肠道健康之间的双向联系
  14. vue开发PC端响应式项目
  15. 我的学习笔记002--asp.net中的路径mxx
  16. 牛顿法、梯度下降法与拟牛顿法
  17. CAD版本怎么转换?试试这种方法
  18. Strongly Connected Tournament
  19. 赵志博陕师大计算机科学学院,肖 冰
  20. 芋道 Spring Boot 对象转换 MapStruct 入门

热门文章

  1. centos7 kafka2.3.1单点部署
  2. TFS2010映射工作区问题 路径 XXX 已在工作区 XXX;XXX 中映射
  3. html属性wmode代码,html – wmode – 浏览器的渲染行为意味着什么?
  4. 1044. 火星数字(20)
  5. zabbix mysql主从_zabbix监控mysql主从状态
  6. 【OS学习笔记】十四 保护模式二:段描述符
  7. n个字符串按照字典序排列
  8. 关于python中带下划线的变量和函数 的意义
  9. 集腋成裘-10-ECharts -未知-03
  10. 关于onclick点击无效问题