【发布时间】:2015-01-08 15:23:51
【问题描述】:
这是我被困在下面的试卷中的一个问题,尽管我无法完成,但我已经附上了这个问题,但我已经完成了一些。
问题:
使用堆栈和队列类的以下类定义编写一个模板函数reverseQueue(?),它将指向队列的指针作为参数并使用堆栈对象(或指向堆栈对象的指针)来反转给定的队列。对 reverseQueue 的函数调用应该反转作为参数传递的队列的数据。 [提示:只需在你的 reverseQueue(?) 函数中调用下面给出的适当方法。您不必为下面给出的堆栈和队列类/方法编写实现代码。只需阅读每种方法的作用并根据需要使用它们。]
template <class T>
struct NODE {
NODE<T> *pNext;
T Data;
};
template <class T>
class stack{
private:
NODE<T> * top;
public:
stack();
~stack();
void push (T data); //pushes a new node with data type //T in a stack
bool pop (T &data); //pops out the top most node from //the stack
void printStack(); //prints all elements of a stack
};
template <class T>
class queue {
private:
NODE<T> * front;
NODE<T> * tail;
public:
queue ();
~queue();
bool dequeue ( T & data); //removes first node from //a queue
bool enqueue (T val); //appends a new node in a //queue
};
我的回答不完整,因为我无法继续下面是我的回答,无论我做了什么
template <class T>
void reverseQueue(queue <T> *ptr){
stack <T> *stackptr= new stack<T>;
T temp;
while(ptr->front !=NULL){
temp=ptr->Data;
ptr->dequee(ptr->Data);
stackptr->push(temp);
}
// incomplete code
}
如果有人能给出答案,那就太好了
【问题讨论】:
-
看起来
stack和queue基本一样,只是顺序颠倒了。所以你已经开始了;将队列中的项目(例如1, 2, 3)移动到堆栈将反转它们的顺序(例如3, 2, 1)。现在您需要将它们从堆栈中弹出并重新添加到队列中。 -
@JonathanPotter 但这正是我想不出我能写的代码的地方,我知道这个概念,但不知道实现它的代码
-
不要看私处。你不需要一个指针。
-
@molbdnilo 我现在所做的一切对吗?
-
基本上你想要
while (stack.pop) queue.enqueue()。