如何在c中插入一个从数组开头开始迭代的元素?

How to insert an element starting the iteration from the beginning of the array in c?

我看到从后端开始迭代时在数组中插入元素。但是我想知道是否可以从前面插入

终于想到办法了,上代码

 #include <stdio.h>
    int main()
    {
        int number = 5; //element to be inserted
        int array[10] = {1, 2, 3, 4, 6, 7, 8, 9};
        int ele, temp;
        int pos = 4; // position to insert
        printf("Array before insertion:\n");
        for (int i = 0; i < 10; i++)
        {
            printf("%d ", array[i]);
        }
        puts("");
    
        for (int i = pos; i < 10; i++)
        {
            if (i == pos) // first element
            {
                ele = array[i + 1];
                array[i + 1] = array[i];
            }
            else // rest of the elements
            {
                temp = array[i + 1];
                array[i + 1] = ele;
                ele = temp;
            }
        }
        array[pos] = number; // element to be inserted
        printf("Array after insertion:\n");
        for (int i = 0; i < 10; i++)
        {
            printf("%d ", array[i]);
        }
    
        return 0;
    }

输出如下:

Array before insertion:
1 2 3 4 6 7 8 9 0 0
Array after insertion:
1 2 3 4 5 6 7 8 9 0

在 C 中,数组具有基于第一个元素的地址(又名指针)的“本机”内置实现和用于元素寻址的 [] 运算符。

分配数组后,不会自动处理或检查其实际大小:代码需要确保边界未被侵入。

此外,在 C 中,任何变量都没有默认值(又名 empty),其中包括数组和数组元素。

不过,在 C 中没有像 insertionappendingremoval 这样的东西的一个数组元素。您可以使用 [] 运算符简单地引用第 n 个(n0 开始)数组元素。 所以,如果你有一个数组,你不能在它的第 n 个位置 insert 一个新项目。您只能读取或(覆盖)写入它的任何项目。

任何其他操作,如插入或删除,都需要临时代码,这些代码基本上可以归结为向前移动数组元素(为插入腾出空间)或向后移动(为 删除 一)。 这是 C 语言的特性,不应被视为限制:任何其他允许这些数组操作的语言都必​​须具有较低级别的隐藏实现或非平凡的数据结构来实现数组。

这意味着,在 C 中,虽然将内存使用量保持在最低限度,但这些数组操作需要一些耗时的实现,例如项目移位操作。 然后,您可以权衡内存使用量与时间使用量,并通过使用例如单链表和双链表 link 来提高整体效率。您为 link 指针丢失了一些内存,以支持更快的插入广告删除操作。这主要取决于实施目标。

最后,要回答最初的问题,实际答案需要一些关于内存与时间权衡的额外细节,可以通过这些细节来实现目标。

@Krishna Acharya 描述的解决方案是一个简单的基于移位的解决方案,没有边界检查。一个非常简单且有点幼稚的实现。

最后一点。 Krishna 代码在数组末尾显示的 0s 应被视为仅仅是随机值。正如我之前所说,没有默认值。 代码应该改为:

int array[10] = {1, 2, 3, 4, 6, 7, 8, 9, 0, 0};

为了确保最后两个数组元素的任何未使用值为0