问答详情
源自:4-1 环形队列实现上

清空队列的时候

  1. 为什么不需要将数组中的元素赋值为0来清空队列中的元素,而仅仅是设置头、尾、长度为0?

  2. 如果说清空后再插入队列的新值会覆盖旧值,那么考虑一种情况,假如一个队列10个元素,全部填满,然后按照视频中的方法清空队列,这时候,再次操作队列,只插入5个元素,那是不是会出现读取该队列的时候该队列依然是10个元素的情况呢?(5个新入队的,5个旧值)

提问者:big0god 2017-08-22 17:27

个回答

  • qq_谷是盛满泪的眼_0
    2017-08-22 19:28:07
    已采纳

    1. 仅仅将元素赋值为0,0也是一个int 数值占据内存空间,并未起到清空队列的作用。

    2. 清空队列的时候已经设置长度为零,再次插入数值的时候长度重新从零计数,插入5个长度增到5,不会出现再次读取的时候长度还是10 的情况

  • big0god
    2017-08-22 19:40:53

    谢谢你!不过对于第二个问题,我的理解是,长度分为数组长度m_length和已经入队的对象长度m_used两种。事实上清零是将m_used清零,而m_length依然没变,所以在我上面假设的情况下,倘若再读取m[i],其中5<i<m_length,是会读取到以前的旧值的。虽然说实际情况下i的上限是m_used-1,正常情况下不会读取到后面的值,但是这样清空数组会不会有些问题呢。(因为值并没有被清空,还是存在堆内存里面)