如何反转队列并显示它

时间:2015-10-28 07:54:04

标签: c++ class queue reverse

我已经创建了一个队列类,我有一个队列,我想要反转它,但是当我实现该函数时,它不会显示任何内容。 这是它

void reverse(Queue <T> &queue) {
    if(!queue.empty())
    {
        int temp=queue.queue_front;
        queue.pop(queue.queue_front);
        reverse(queue);
        queue.push(temp);
    }
}

我正在使用的pop函数需要一个值,这就是为什么有queue.queue_front。我试图用递归来做它。这是我的打印函数

void display() {
    for(int current = queue_front+1; current < queue_length; current++)
    {
         cout << "[" << current << "]=" << queue_array [current] << " ";
    }
}

现在这就是我在主要功能中所做的事情

Queue <int>queue1(10);
queue1.push(16);
queue1.push(14);
queue1.push(6);
queue1.push(60);
queue1.reverse(queue1);
queue1.display();

这是pop功能

void pop(T& item) {
    if (empty()) {
        cout << "The Queue is empty!";
        exit(1);
    }
    else {
        queue_front = (queue_front + 1) % queue_size; 
        item = queue_array[queue_front];
        queue_length--;
    }
}

它没有显示任何内容。谢谢。

1 个答案:

答案 0 :(得分:0)

您正在使用整数队列进行测试,这会隐藏一些错误 您应该使用Queue<std::string>进行测试。

首先,在这里:

int temp=queue.queue_front;

您要保存索引,而不是元素 你打算做什么

T temp = queue.queue_array[queue.queue_front];

但是没有理由混淆成员变量(见下文)。

下面,

queue.pop(queue.queue_front);

您将对队列成员的引用传递给pop pop的参数是顶部元素弹出后存储的位置。

换句话说,在该行之后,queue.queue_front将是位于队列前面的元素,而不是队列新前面的索引。

这可能有用:

void reverse(Queue <T> &queue) {
    if(!queue.empty())
    {
        T temp;
        queue.pop(temp);
        reverse(queue);
        queue.push(temp);
    }
}