x插入之后,数组的数的个数发生变化,然后咋写嘞

img


就是不知道插入之后咋写这个数组了,写不出来,一开始是写9个还是10个呢,写9个的话,x插入之后的数组咋样能改成10个

当然是一开始定义 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;
}


不知道你这个问题是否已经解决, 如果还没有解决的话:
  • 你可以参考下这个问题的回答, 看看是否对你有帮助, 链接: https://ask.csdn.net/questions/7596525
  • 这篇博客也不错, 你可以看下[C语言]向有序数组插入:已有一个按升序排序的数组,含n个元素。输入整数x,将x插入数组中,使数组元素仍按升序排列。请使用数组实现。
  • 除此之外, 这篇博客: 设顺序表中的数据元素递增有序,试着写一算法,将x插入到顺序表上的适当位置上,以保持该表的有序性。中的 完整的代码 部分也许能够解决你的问题, 你可以仔细阅读以下内容或者直接跳转源博客中阅读:
    #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 }
    
    
    
  • 以下回答来自chatgpt:

    实际上,通常来说,数组的长度是不可变的,因此需要重新定义一个长度更长的数组来存储原先的数组值以及新插入的元素。具体来说有以下步骤:

    1. 定义原先数组和新定义的更长的数组,注意长度都应该比原先的数组长度大1。 int originalArray[9] = {0, 1, 2, 3, 4, 5, 6, 7, 8}; int newArray[10] = {0};
    2. 将原先数组的值复制到新数组中(复制前9个值)。 for (int i = 0; i < 9; i++) { newArray[i] = originalArray[i]; }
    3. 插入新元素到新的数组的最后一个位置,例如,插入数字9: newArray[9] = 9;
    4. 此时,新数组的长度已经为10。

    完整代码:

    #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


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^