练习6-数据插入

题目

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

解题步骤

(1)数组建立;
(2)接收用户输入数据;
(3)查找位置;
(4)移动元素;
(5)插入(赋值);
(6)输出结果;

Java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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语言

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#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位置便是空值,只需对它赋值(用户输入值)便实现数据插入。