所以我使用基于数组的队列实现。
填充数组后,要删除第一个元素,我将数组移到左侧。 这使得数组中的最后一个元素为零,这也意味着我无法在数组中输入新元素,因为最后一个点被零占用。
有没有办法完全删除元素而不是它变为零?
我尝试使用它完全清空队列,但它只是将所有元素都变为零。
case 3:
memset(queue, 0, sizeof(queue));
printf("\nThe entire queue has been emptied");
break;
谢谢。
答案 0 :(得分:1)
为什么不用新值覆盖最后一个元素?假设队列长度为onCreate
个元素,并且您希望使用新值覆盖最后一个元素n
,例如array[n-1]
...
23
或
array[n-1] = 23;
要完全删除条目听起来像一个难题,因为你正在使数组变小,但仍然会有一些内存,你的最后一个元素曾经存在。您应该控制您的程序,以便它永远不会尝试访问超出数组限制的数组元素,因为结果将是不可预测的。
在您的代码中,您有一种方法可以了解数组的长度,这一点非常重要。计算机可能无法阻止您访问内存超出为阵列分配的内存,但这是一个非常糟糕的主意 - 特别是如果您尝试写入它。
因此,只要你记得你的数组需要多长时间才能删除最后一个元素,将数组的长度减少1。