显示循环双头队列的功能

时间:2018-10-15 13:38:02

标签: c++

我试图显示循环双端队列。当我将指针放在第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; 
};

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。。该问题仍然提供的信息太少,无法回答有关数据值更改的部分