题目
编写程序,有一维数组数据为: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}; 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++) if(input<=array[i]) break; location=i; for(i=6;i>=location;i--) 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++) 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; }
|
说明
- 难点在于如何找到待插入数据合适位置以及如何移动数组元素位置。这里使用循环求解:
for
循环实现位置查找功能,判断条件为待插入数据<=
数组元素值。若满足条件,则退出循环并保留位置下标给location
。
- 找到位置后需要插入数据,并且不能覆盖掉原数据,这时候需要对原数据整体移动。同样使用
for
循环实现,i=7
就相当于指针指向了数组中最后一个元素,所有在location
之后的元素都得为它 “让位”,即后移。最后location
位置便是空值,只需对它赋值(用户输入值)便实现数据插入。