void enqueue(int val){
if (Queue is full, do this){
//... What should I write here? ...
}else{
if(empty()){
r = f = 0;
}else{
r++;
int arr_length = (sizeof(arr)/sizeof(arr[0])) - 1;
if(r == arr_length)
r = 0;
}
arr[r] = val;
}
}
我的问题:队列中会有2个指针。指针R指向队列的REAR。指向队列FRONT的指针F.从队列中删除元素时,队列中的第一个元素将被删除,因此,F = F-1;当向队列中添加新元素时,它将被添加到队列中的最后一个位置,因此R = R + 1。
假设我声明固定数组大小为5. R和F可以在队列中循环(循环数组)。如何检查队列是否已满?
我想到的是检查队列是否已满:
案例1 - 当F指向数组第一个元素& R指着 array last element = Queue已满。
案例2:当F-1 = R时,队列已满。
我的逻辑是否正确?如何在编码中实现?
答案 0 :(得分:0)
您的队列是完全检查可以:
Case 1 - When F is pointing at array first element & R is pointing at array last element = Queue is full.
Case 2: When F - 1 = R. Then Queue is full.
满员时,你不能入队 所以,如果你不能入队(当满了),则返回false,然后返回true,即如果你可以入队,那么最好是以书的形式返回。 这将有助于调用入队或出队的调用者
或者,您可以使用std :: queue或std :: array