我的任务的一部分是输出我们的代码,以链表队列的相反顺序打印。我跟我的导师说过,他说他不希望用堆叠完成。没有将队列转换为堆栈的选项,他也不想让它成为双向链表,我不知道如何打印这个。有谁知道我失踪的方式?我已经包括了我写的所有内容。任何想法都将被考虑并提前感谢。
#include <iostream>
#include <fstream>
using namespace std;
class queue{
public:
queue();
void enq(int);
void deq();
int front();
bool isEmpty();
void printq(); //print que in reverse
private:
struct node{
int val;
node* next;
};
node* topPtr;
};
queue::queue()
{
topPtr = NULL;
}
void queue::enq(int x)
{
if (topPtr == NULL)
{
topPtr = new node;
topPtr->val = x;
topPtr->next = NULL;
}
else
{
node* tmp;
tmp = topPtr;
while (tmp->next != NULL)
{
tmp = tmp->next;
}
tmp->next = new node;
tmp = tmp->next;
tmp->next = NULL;
tmp->val = x;
}
}
void queue::deq()
{
node* rem = topPtr;
topPtr = topPtr->next;
delete(rem);
}
int queue::front()
{
return topPtr->val;
}
bool queue::isEmpty()
{
if (topPtr == NULL)
return true;
else
return false;
}
void queue::printq()
{
////totally lost here
}
int main()
{
ifstream cmds("cmd.txt");
int cmd, op;
queue s;
bool isEmpty;
while (cmds >> cmd)
{
switch (cmd)
{
case 1:
cmds >> op;
s.enq(op);
break;
case 2:
s.deq();
break;
case 3:
cout << "Top: " << s.front() << endl;
break;
case 4:
empty = s.isEmpty();
if (empty)
cout << "queue is empty" << endl;
else
cout << "queue is not empty" << endl;
break;
case 5: //print case
}
}
return 0;
}
答案 0 :(得分:1)
您可以从后面的索引/指针迭代到前面的索引/指针,具体取决于您插入的方式(可以交换)。
答案 1 :(得分:0)
使用递归函数。
这样,你没有明确地使用堆栈。但是你隐式使用了调用栈。
PS:我没有写任何代码或提到要做什么,但给了一个提示。因为它是一项任务,你应该自己动手。