当然是一开始定义 10个了, 题目说是 升序,说明 从小到大 排序的,
那就 循环判断 要插入的 x 是否 小于 当前遍历的元素,如果小于,说明 找到要插入的位置了,后面的元素 只需要从后面开始,往后移一位就行了
#include <stdio.h>
int main ()
{
int data[10], i, j, x;
printf("输入升序的9个数:\n");
for (i = 0; i < 9; i++)
scanf("%d", &data[i]);
printf("输入要插入的x:\n");
scanf("%d", &x);
for (i = 0; i < 9; i++)
{
if (x < data[i])
{
for (j = 9; j > i; j--)
data[j] = data[j - 1];
data[i] = x;
break;
}
}
printf("插入后的数据:\n");
for (i = 0; i < 10; i++)
printf("%d ", data[i]);
return 0;
}
不知道你这个问题是否已经解决, 如果还没有解决的话:#include<stdio.h>
2 #include<stdlib.h>
3
4 #define LIST_INIT_SIZE 100
5 #define LISTINCREMENT 10
6 typedef struct
7 {
8 int *elem;//存储空间基址
9 int length ;
10 int listsize;
11 }SqList;
12
13 void InitList(SqList *L)
14 {
15 L->elem = (int *)malloc(LIST_INIT_SIZE*sizeof(int));//创建一个空列表
16 L->length = 0;//空表长度为0
17 L->listsize =LIST_INIT_SIZE;//初始存储容量
18
19 }
20
21 void InputData(SqList *L)
22 {
23
24 int n;
25 int *p;
26 p = L->elem;
27 printf("请输入列表元素个数:");
28 scanf("%d",&n);
29 /*进行判断,是否超过列表长度*/
30 if(n>L->listsize)//超过存储容量,再分配空间
31 {
32 L->elem = (int*)realloc(L->elem,(L->listsize+LISTINCREMENT)*sizeof(int));//再分配空间
33 L->listsize +=(n+LISTINCREMENT);
34 while(n!=0)
35 {
36 scanf("%d",p);
37 p++;
38 n--;
39 L->length++;
40 }
41 }
42 else
43 {
44
45 while(n!=0)
46 {
47 scanf("%d",p);
48 p++;
49 n--;
50 L->length++;
51 }
52 }
53 }
54
55 void DisplayList(SqList *L)//显示顺序列表
56
57 {
58
59 int i;
60 int *p = L->elem;
61 for(i = 0; i<L->length; i++)
{
63 printf("%d\n",*p);
64 p++;
65 }
66
67 }
68
69 void InsertElem(SqList *L,int e)//往顺序表中插入一个元素,使其递增有序
70 {
71 //进行溢出判断
72 if(L->length+1>L->listsize)//在分配内存空间
73 {
74 L->elem = (int*)realloc(L->elem,(L->listsize+LISTINCREMENT)*sizeof(int));//再分配空间
75 L->listsize +=(LISTINCREMENT);
76 }
77 if(L->length == 0)//如果列表为空
78 printf("error !List empty");
79 int *p = L->elem;
80 int *p_last = L->elem+L->length-1;
81 /* 先查找插入元素的位置*/
82 while(e > *p&&p<p_last)
83 {
84 p++;
85 }
86 /*p为元素的插入位置,p及后面的元素依次往后移动*/
87 int *q ;
88 for(q = (L->elem)+(L->length)-1;q>=p;q--)
89 {
90 *(q+1) = *q;
91 }
92 *p=e;
93 L->length++;
94 }
95
96 int main()
97 {
98 SqList L; //定义一个顺序表
99 InitList(&L);//初始化
100 InputData(&L);//输入数据
101 DisplayList(&L);//显示数据
102 printf("插入数据:\n");
103 int m;
104 scanf("%d",&m);
105 InsertElem(&L,m);
106 printf("显示插入后的顺序表\n");
107 DisplayList(&L);
108
109 return 0;
110 }
实际上,通常来说,数组的长度是不可变的,因此需要重新定义一个长度更长的数组来存储原先的数组值以及新插入的元素。具体来说有以下步骤:
int originalArray[9] = {0, 1, 2, 3, 4, 5, 6, 7, 8}; int newArray[10] = {0};
for (int i = 0; i < 9; i++) { newArray[i] = originalArray[i]; }
newArray[9] = 9;
完整代码:
#include <stdio.h>
int main() {
int originalArray[9] = {0, 1, 2, 3, 4, 5, 6, 7, 8};
int newArray[10] = {0};
for (int i = 0; i < 9; i++) {
newArray[i] = originalArray[i];
}
newArray[9] = 9;
printf("New array: ");
for (int i = 0; i < 10; i++) {
printf("%d ", newArray[i]);
}
}
输出结果:New array: 0 1 2 3 4 5 6 7 8 9