1-5 线性表元素的区间删除 (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元素可以通过>、==、<进行比较;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;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/429612.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Unknown storage engine 'InnoDB'

报错情况&#xff1a;在导入数据时候发现找不到InnoDB这个错误&#xff0c;之前查看博客时候明白了IsAsm数据库和InnoDB这两个的区别了。 解决方案&#xff1a; 尝试一&#xff1a;将my.ini配置文件的isasm改成InnoDB。这个是之前参考博客完成。但是这个没有奏效。 尝试二&…

2-10 [搞定!]出栈序列的合法性 (20 分)

给定一个最大容量为 M 的堆栈&#xff0c;将 N 个数字按 1, 2, 3, …, N 的顺序入栈&#xff0c;允许按任何顺序出栈&#xff0c;则哪些数字序列是不可能得到的&#xff1f;例如给定 M5、N7&#xff0c;则我们有可能得到{ 1, 2, 3, 4, 5, 6, 7 }&#xff0c;但不可能得到{ 3, 2…

Java中有关Null的9件事

对于Java程序员来说&#xff0c;null是令人头痛的东西。时常会受到空指针异常&#xff08;NPE&#xff09;的骚扰。连Java的发明者都承认这是他的一项巨大失误。Java为什么要保留null呢&#xff1f;null出现有一段时间了&#xff0c;并且我认为Java发明者知道null与它解决的问题…

3-5 单链表分段逆转 (20 分)

给定一个带头结点的单链表和一个整数K&#xff0c;要求你将链表中的每K个结点做一次逆转。例如给定单链表 1→2→3→4→5→6 和 K3&#xff0c;你需要将链表改造成 3→2→1→6→5→4&#xff1b;如果 K4&#xff0c;则应该得到 4→3→2→1→5→6。 函数接口定义&#xff1a; v…

studio快捷键

转载于:https://www.cnblogs.com/hoobey/p/6431027.html

c语言编写单片机技巧

1. c语言和汇编语言在开发单片机时各有哪些优缺点&#xff1f; 答&#xff1a;汇编语言是一种用文字助记符来表示机器指令的符号语言&#xff0c;是最接近机器码的一种语言。其主要优点是占用资源少、程序执行效率高。但是不同的cpu&#xff0c;其汇编语言可能有所差异&#xf…

7-1 叶节点求和 (30 分)

对给定的有N个节点&#xff08;N>0&#xff09;的二叉树&#xff0c;求叶节点元素之和。 输入格式: 第一行是一个非负整数N&#xff0c;表示有N个节点 第二行是一个整数k&#xff0c;是树根的元素值 接下来有N-1行&#xff0c;每行是一个新节点&#xff0c;格式为 r d e …

Docker的学习笔记(开发的技术分享转发)

我的Docker学习记录一、安装dockeryum install -y docker-io二、使用docker1、下载镜像docker pull <image>2、查询镜像docker search <image> 3、从镜像运行容器docker run -it --name <name> <image> /bin/bash4、后台运行docker run -itd --name &l…

PhoneUtils

import java.util.regex.Matcher; import java.util.regex.Pattern;public class PhoneUtils {/*** param phoneNo* 加星号过的电话号码*/public static String dealPhoneNo(String phoneNo) {return phoneNo.substring(0, 3) "****" phoneNo.substring…

批量更新

这是最基本的批量更新。我使用的时候还不如逐条。 这好像还是官方的批量更新&#xff0c;反正不咋地。 ///批量更新&#xff0c;效率太低&#xff0c;不如逐条更新static void Update(){SqlDataAdapter sda new SqlDataAdapter("select PID,FMAddress,MeanValue1,StatsVa…

java实例练习——基于TCP/IP协议的多客户端通信

先说一下大概的思路&#xff1a; 应用多线程来实现服务器与多客户端之间的通信 1、服务器端创建ServerSocket&#xff0c;循环调用accept&#xff08;&#xff09;等待客户端连接&#xff1b; 2、客户端创建一个Socket并请求与服务器端连接&#xff1b; 3、服务器端接受客户端请…

windows资源管理器已停止工作后,使用命令提示窗口拷贝文件和运行exe程序

电脑异常现象&#xff1a; 需要从优盘拷贝NetAssist.exe软件至电脑进行运行&#xff0c;发现双击无法打开我的电脑和文件夹&#xff0c;点击提示的重新启动程序问题后仍存在&#xff0c;重启电脑、关机再开机该问题依然存在。插入优盘后可以识别到&#xff0c;但无法打开优盘&…

DAC8563芯片参考手册重要内容总结

DAC8563的主要参数&#xff1a; 供电电压&#xff1a;2.7~5.5V分辨率&#xff1a;16bit&#xff0c;双通道通讯接口&#xff1a;3线SPI串行通讯&#xff0c;速率最高至50MHz&#xff0c;支持3.3V和5V单片机&#xff08;有MOSI/CLK/CS&#xff0c;无MISO&#xff09;内部自带2.…

20155220 吴思其 2016-2017《java程序设计》第一周总结

对第一章和第二章的学习 通过了前两章的学习&#xff0c;我了解到了java的由来以及JVM/JRE/JDK三大平台 JDK JDK 是 Java 语言的软件开发工具包。 JDK是整个JAVA的核心&#xff0c;包括了Java运行环境&#xff0c;一堆Java工具&#xff08;javac/java/jdb等&#xff09;和Java基…

手把手教你从0创建STM32串口空闲+DMA数据接收工程

串口通讯是嵌入式系统中最常用的通讯方式。 STM32的串口接收普通的方式是在串口读数据寄存器非空RXNE中断&#xff08;Read data register not empty&#xff09;中1个字节1个字节的接收串口数据&#xff0c;一帧数据的接收完成可以使用结束帧判断&#xff0c;也可以使用定时器…

CSS display属性的值及作用

display 的属性值有&#xff1a;none|inline|block|inline-block|list-item|run-in|table|inline-table|table-row-group|table-header-group|table-footer-group|table-row|table-column-group|table-column|table-cell|table-caption|inherit其中常用的的有none、inline、blo…

TC214B直流电机控制芯片

潘多拉开发板中通过TC214B电机驱动芯片驱动板载直流电机&#xff0c;因此需要先了解TC214B芯片的主要功能及其使用方法。 通过以上资料可以了解到&#xff0c;MCU控制TC214B从而进行直流电机转动方向&#xff0c;方向控制&#xff08;即前进/后退&#xff09;主要是通过控制MCU…

题目1065:输出梯形

AC: #include<iostream> using namespace std; int main() {int h;while(cin>>h){int i,j,k,t;k(h-1)*2;th;for (i0;i<h;i)//h在此处已用&#xff0c;所以用th来代替重用&#xff1b;{ for (j0;j<k;j)cout<<" ";k-2;for (j0;j<t;j)cout&…

《C语言深度解剖》中的.c/.h 程序模板及函数注释风格

编程规范和变量命令规范对于代码的可阅读性、可维护性有着很大的影响。编程规范有很多&#xff0c;大公司也会制定自己公司的编程规范&#xff0c;如《华为技术有限公司c语言编程规范》等。对于个人编程来说没必要将自己编写的代码按照每一种编程规范去规范&#xff0c;因为不同…

每天学点Linux命令:倒叙打印文件第二行的前100个大写字母

sed -n 2p afile | grep [[:upper:]] -o | tr -d \n | cut -c1-100 | rev 处理第二行 grep:提取大写字母 o: 不显示非结果 tr:删除换行 Cut&#xff1a;截取1-100个字符 rev:逆序 断断续续搞了好长时间。最后还是解决了&#xff1b;man是个好东西~ 好人&…