我试图显示循环双端队列。当我将指针放在第0个位置时在前面插入一个元素时,问题就出现了,它到达第(SIZE-1)个位置,其中尺寸是最大定义的数字。我无法为其申请循环,因此我在下面的代码中使用了if条件条件屁股。
void display(struct Q*q)
{
int i ;
if(q->front <= q->rear)
{
for(i = q->front; i<= q->rear; i= (i+1)%size)
cout<<q->data[i]<<" ";
}
else
{
for(i = q->front; i<= size; i++)
cout<<q->data[i]<<" ";
i=0;
for(i = 0; i<= q->rear;i++)
cout<<q->data[i]<<" ";
}
}
输出:
10 9 10
每当我在队列前面插入10时,9就会递减 例如:
10 10 8 10
10 10 10 7 10
,依此类推。如何在此功能中删除该计数器?我只希望我的输出是:
10 10 10 10
编辑
OP在评论中添加了以下信息:
struct Q
{
int data[size];
int front = -1;
int rear = -1;
};
答案 0 :(得分:0)
使用OP在注释中提供的信息,似乎-1
用于将队列标记为空。
所以显示功能可以这样写:
void display(struct Q*q)
{
if(q->front < 0 || q->rear < 0)
{
cout << "Queue empty" << endl;
return;
}
// Check that front and rear are in valid range
assert(q->front < size);
assert(q->rear < size);
int tmp = q->front;
while(tmp != q->rear)
{
cout << q->data[tmp] << " ";
tmp = (tmp + 1) % size;
}
cout << q->data[tmp] << " ";
}
p.s。。该问题仍然提供的信息太少,无法回答有关数据值更改的部分