【PTA刷题】 顺序表(删除)(代码+详解)

简介: 【PTA刷题】 顺序表(删除)(代码+详解)


题目

已知一组数据,采用顺序存储结构存储,其中所有的元素为整数。设计一个算法,删除元素值在[x,y]之间的所有元素

输入格式:

输入包含三行数据,第一行是表中元素个数,第二行是顺序表的各个元素,第三行是区间x和y。

输出格式:

删除元素值在[x,y]之间的所有元素后,输出新的顺序表。(最后无空格)

输入样例:

在这里给出一组输入。例如:

10
55 11 9 15 67 12 18 33 6 22
10 20

输出样例:

在这里给出相应的输出。例如:

55 9 67 33 6 22

C代码

#include<stdio.h>
int main(){
    int n; // 定义一个整数 n,用于存储数组中元素的数量
    scanf("%d",&n); // 读取用户输入的元素数量
    int arr[1000]; // 定义一个整数数组,最大长度为1000
    for(int i = 0; i < n; i++){
        scanf("%d", &arr[i]); // 循环读取用户输入的数组元素
    }
    int x, y; // 定义两个整数 x 和 y,表示要删除的元素值的区间
    scanf("%d %d", &x, &y); // 读取区间 x 和 y 的值
    int newSize = 0; // 定义一个新的变量用于存储删除元素后的数组长度
    for(int i = 0; i < n; i++){
        if(arr[i] < x || arr[i] > y){ // 检查当前元素是否不在 x 和 y 的区间内
            arr[newSize] = arr[i]; // 将不在区间内的元素移到数组前端
            newSize++; // 更新新数组的长度
        }
    }
    for(int i = 0; i < newSize; i++){ // 遍历新数组
        printf("%d", arr[i]); // 打印每个元素
        if(i < newSize - 1){ 
            printf(" "); // 如果不是最后一个元素,则打印一个空格
        }
    }
    return 0; // 程序结束
}

详解

上面的代码给出了详细的注释,目的是为了帮助你更好的理解,你平时写代码的时候可以不用添加这麽多注释.

这个题目的目的是从一个顺序存储的整数数组中删除所有在区间 [x, y] 内的元素。现在,我将详细解释这个算法的运作原理和代码的各个部分。

变量初始化和输入读取:

  • int n; 用于存储数组中元素的数量。
  • scanf("%d",&n); 读取元素数量。
  • int arr[1000]; 定义一个大小为 1000 的整数数组,假设数组的最大长度不会超过 1000。
  • 接下来的循环用于读取数组中的元素。
  • int x, y; 用于存储区间的边界值 x 和 y。
  • scanf("%d %d",&x,&y); 读取 x 和 y 的值。

删除操作:

  • 定义一个新的变量 int newSize = 0; 用于记录删除元素后数组的新长度。
  • 接下来的循环遍历数组 arr
  • 对于每个元素 arr[i],检查其是否不在区间 [x, y] 内(即 arr[i]<x||arr[i]>y)。
  • 如果元素不在区间内,它将被“保留”,即 arr[newSize] = arr[i]; newSize++;。这里我们实际上是在原数组上进行覆盖操作,将不需要删除的元素向数组的前端移动。

输出结果:

  • 最后一个循环用于输出新数组。
  • 循环遍历新数组的每个元素,并打印它们。
  • 如果当前元素不是最后一个元素,那么在它后面打印一个空格,以满足输出格式要求。

这个算法的关键点在于它原地(in-place)修改了数组,而没有使用额外的空间来存储结果。这样做既节省了空间,又保持了算法的效率。

目录
相关文章
|
存储 C语言
C语言中如何选择合适的方式将整数转换为浮点数
C语言中如何选择合适的方式将整数转换为浮点数
2587 0
|
存储 机器学习/深度学习 算法
模拟实现单链表、双链表、栈、队列——数组模拟
我们在数据结构中都学到过单链表、双链表、栈和队列,当我们实现的时候时使用结构体指针实现的。定义一个结构体,结构体中存储指针变量和存放数值的变量。当然,C++的STL库中已经有实现好的栈和队列,我们可以直接用。但是在做算法题时,有时候我们会发现超出时间限制。原因是我们用STL库中的栈和队列容器时,效率相对来说较慢。我们这时就引出用数组模拟实现栈和队列。用数组模拟实现的使用起来效率更高、更方便。当然,我们也会讲到用数组模拟实现单链表和双链表。
294 0
|
人工智能 测试技术 API
Windows用户必备:Postman v11详细安装指南与API测试入门教程(附官网下载
Postman是全球领先的API开发与测试工具,支持REST、SOAP、GraphQL等协议调试。2025年最新版v11新增AI智能生成测试用例、多环境变量同步等功能,适用于前后端分离开发、自动化测试、接口文档自动生成及团队协作共享API资源。本文详细介绍Postman的软件定位、核心功能、安装步骤、首次配置、基础使用及常见问题解答,帮助用户快速上手并高效利用该工具进行API开发与测试。
|
存储
数据结构:图文详解单链表的各种操作(头插法,尾插法,任意位置插入,删除节点,查询节点,求链表的长度,清空链表)
数据结构:图文详解单链表的各种操作(头插法,尾插法,任意位置插入,删除节点,查询节点,求链表的长度,清空链表)
3087 0
|
存储 算法 C语言
【数据结构】线性表的顺序存储结构
【数据结构】线性表的顺序存储结构
541 1
|
关系型数据库 MySQL 数据库
Python Stock安装与使用
Python Stock安装与使用
748 1
|
机器学习/深度学习 人工智能 数据挖掘
【机器学习】贝叶斯统计中,“先验概率”和“后验概率”的区别?
【5月更文挑战第11天】【机器学习】贝叶斯统计中,“先验概率”和“后验概率”的区别?
|
存储 移动开发 前端开发
如何写html邮件 —— 参考主流outook、gmail、qq邮箱渲染邮件过程
如何写html邮件 —— 参考主流outook、gmail、qq邮箱渲染邮件过程
2031 1

热门文章

最新文章