我目前正在开发一个类的项目,它要求我使用链表实现队列而不使用库。到目前为止,我的项目工作正常但是当我push_back()1,3,5,7时,屏幕显示左边队列的前面。我更喜欢它看左边的后方,如REAR 7 5 3 1 FRONT。我在这里错过了什么可以帮助我做到这一点?
#include "queue.h"
#include <iostream>
Queue::Queue()
{
queue_size = 0;
front = 0;
rear = 0;
}
Queue::~Queue()
{
delete front;
delete rear;
}
void Queue::push_back(int x)
{
node * q = new node;
q->data = x;
q->next = 0;
if(this->isEmpty())
{
front = q;
front ->next = 0;
rear = front;
}
else
{
rear->next = q;
rear = rear->next;
rear->next = 0;
}
queue_size = queue_size + 1;
}
void Queue::pop_front(int &num)
{
node * temp;
num = front->data;
temp = front;
front = front ->next;
delete temp;
queue_size = queue_size - 1;
}
bool Queue::isEmpty()
{
if(front == 0)
return true;
else
return false;
}
int Queue::ret_size()
{
return queue_size;
}
void Queue::display()
{
node * temp;
temp = front;
for(int i = 0; i < queue_size; i++)
{
std::cout<<temp->data<< " ";
temp = temp->next;
}
std::cout<<"\n";
}
答案 0 :(得分:1)
如果您对递归很满意,并且相信您的系统有足够的堆栈来计算您计划的队列大小,那么这可以正常工作。
void Queue::display(void)
{
node* temp;
temp = front;
if(temp)
temp->displayR();
std::cout<<"\n";
}
void Queue::displayR(void)
{
if(m_next)
m_next->displayR(); // spin down to end of queue
// now display the current data
std::cout << data << " "; // report end of queue first
}
仅供参考:在ubuntu 12.04和4 Gig的ram上,我相信在队列中有超过100K的元素之前我不会遇到堆栈溢出。你的结果会有所不同......
如果您没有信心,只需将队列中的内容传输到矢量中,然后反向显示矢量内容。
由于它很容易,并且您想避免使用库,只需使用数组。
答案 1 :(得分:0)
为什么你不能简单地在显示屏中反转循环(),这样它从后面开始并向前移动?