如何删除数组的第一个元素,并在结尾添加一个新元素?

时间:2017-03-07 15:42:16

标签: c arrays

我想要做的是,我想删除数组的第一个元素,左移其余元素,然后在数组末尾添加一个新元素。

例如,最初的数组是:

Array[5] = {3,7,10,22,5}

删除第一个元素,即' 3',然后将剩余的元素移到左边,然后将一个新值作为输入添加到数组的最后一个索引:

Array[5] = {7,10,22,5,4}

通过这种方式,我想继续向末尾添加一个新元素,并定期删除第一个元素。其目的是实时记录最后一小时的传感器读数(通过每分钟后进行测量)。通过这种方式,我可以实时找出最后一小时的平均传感器值。 帮我解决这个问题。

3 个答案:

答案 0 :(得分:3)

换档操作非常昂贵。我们必须迭代while数组并移动每个元素。这是一个更简单,更有效的解决方案:A(简化)circular buffer

#define size 5
int array[size];
int headIndex = 0;

int removeHeadAddTail(int tail) {
    int head = array[headIndex];
    array[headIndex] = tail;
    headIndex = (headIndex + 1) % size; 
    return head;
}

答案 1 :(得分:2)

你可能应该选择一个更合适的数据结构,但是如果由于某种原因你坚持使用数组,那么你可以使用memmove将所有元素向下移动一个,例如。

const size_t N = 5;

memmove(&array[0], &array[1], (N - 1) * sizeof(array[0]);

然后将新值写入最后一个元素:

array[N - 1] = new_value;

答案 2 :(得分:0)

您可以使用指向数组中元素索引的变量。我们称这个变量为minute。每次进行测量时,都会将传感器值存储在“分钟”位置,如array[minute] = sensorValue;。然后将minute增加1.当变量minute达到60时,将其重置为0。 这样您就不必移动值,但仍可以计算测量值的平均值。

最初,您可以将数组中的值设置为-1(或其他值,具体取决于您的设置),并仅根据非-1的值计算平均值。