练习6—数据插入

简介: 练习6—数据插入

题目

编写程序,有一维数组数据为:23,34,45,60,67,88,96,从键盘上输入一个数据,将数据插入到数组,使得插入后的数组元素依然保持有序并输出到屏幕。

解题步骤

(1)数组建立;

(2)接收用户输入数据;

(3)查找位置;

(4)移动元素;

(5)插入(赋值);

(6)输出结果;

Java

import java.util.Scanner;
public class Demo {
    public static void main(String[] args){
        int[] array=new int []{23,34,45,60,67,88,96,0};//此处的0表示占位(否则创建的数组为[7]
        int i,input,location;
        Scanner user=new Scanner(System.in);
        System.out.println("please enter an integer:");
        input=user.nextInt();
        for(i=0;i<7;i++)   //因为0占位,所以相当于只有7个元素,不能改为8
            if(input<=array[i])
                break;
        location=i;
        for(i=6;i>=location;i--)  //注意i初始值6,最大下标为6(未插入数据前)
            array[i+1]=array[i];  //前方数据后移
        array[location]=input;
        System.out.println("insert "+input+"after the array elements are:");
        for (i = 0; i < 8; i++)
            System.out.format("%d  ", array[i]);
    }
}

说明

Java处最关键的是分清楚插入数据前后,数组元素的下标值以及数组的建立过程。

C语言

#include <stdio.h>
int main()
{
    int array[8] = {23, 34, 45, 60, 67, 88, 96}, i, input, location = 0;
    printf("please enter any integer:");
    scanf("%d", &input);
    for (i = 0; i < 7; i++) //i<现有元素个数,寻找位置
        if (input <= array[i])
            break;
    location = i;                   //标记此处位置,占位
    for (i = 7; i >= location; i--) //顺次后移
        array[i + 1] = array[i];
    array[location] = input;
    printf("Insert %d housing number element:", input);
    for (i = 0; i < 8; i++)
        printf("  %d", array[i]);
    return 0;
}

说明

  1. 难点在于如何找到待插入数据合适位置以及如何移动数组元素位置。这里使用循环求解:for循环实现位置查找功能,判断条件为待插入数据<=数组元素值。若满足条件,则退出循环并保留位置下标给location
  2. 找到位置后需要插入数据,并且不能覆盖掉原数据,这时候需要对原数据整体移动。同样使用for循环实现,i=7就相当于指针指向了数组中最后一个元素,所有在location之后的元素都得为它 “让位”,即后移。最后location位置便是空值,只需对它赋值(用户输入值)便实现数据插入。



相关文章
|
机器学习/深度学习 人工智能 网络协议
CPP2022-23-函数进阶-函数指针
CPP2022-23-函数进阶-函数指针
325 0
|
机器学习/深度学习 算法 PyTorch
卷积神经网络的结构组成与解释(详细介绍)
卷积神经网络的结构组成与解释(详细介绍)
2082 0
|
消息中间件 Oracle 关系型数据库
实时计算 Flink版产品使用合集之同步过程中如果源数据发生了变化,该怎么处理
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStreamAPI、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
芯片 内存技术
嵌入式学习:Cortex-M系列芯片介绍
以意法半导体芯片为例子:Cortex-M0:主频在48M,一般用于低功耗;Cortex-M3:主频为72M,是现在市面上最为流行的芯片之一,一般用于工业等部分控制功能; Comtex-M4:主频为168M,一般用于电源管理控制
嵌入式学习:Cortex-M系列芯片介绍
什么是多路复用?描述不同类型的复用技术
多路复用是一种技术,其中几个消息信号被组合成一个复合信号,以便在一个公共信道上传输。这些要在公共信道上传输的信号必须保持分开,以便它们不会相互干扰,因此它们可以在接收端很容易地分离。
974 0
什么是多路复用?描述不同类型的复用技术
|
机器学习/深度学习 XML 存储
【周末送书】使用OpenCV和OpenVINO轻松创建深度学习应用(附实现方式和代码出处)
【周末送书】使用OpenCV和OpenVINO轻松创建深度学习应用(附实现方式和代码出处)
374 0
|
XML 小程序 前端开发
微信小程序退款流程详解
微信小程序退款流程详解
3010 0
微信小程序退款流程详解
|
机器学习/深度学习 人工智能 自然语言处理
程序人生——聊聊人工智能、元宇宙、NFT和WEB3.0
程序人生——聊聊人工智能、元宇宙、NFT和WEB3.0
程序人生——聊聊人工智能、元宇宙、NFT和WEB3.0