如何显示动态堆栈和队列中的所有元素(C++)
问题描述:
我需要显示一个堆栈和队列的所有元素,使用静态结构我使用了递归函数,但动态它根本不起作用。如何显示动态堆栈和队列中的所有元素(C++)
当我使用函数时,它显示正确的元素,但之后,无论我做什么,程序崩溃。
此外,为了执行print(),一个requeriment是它假设我只能访问顶端,所以如果我显示顶端,我不能看到前一个节点,除非我弹出当前顶部,然后显示新的顶部。
这是动态堆栈的代码:
class Person{
public:
string nombre,weight;
Person *sig;
public:
void Capture();
void Show();
};
typedef Person *pPerson;
class stack{
public:
pPerson top;
void Push();
void PushPtr(pPerson object);
void Pop();
pPerson Top();
void Print();
};
//Push new elements
void stack::Push(){
pPerson newP;
newP=new Person();
newP->Capture();
if(top==NULL){
newP->next=NULL;
top=newP;
}
else{
newP->next=top;
top=newP;
}
size++;
}
//For print
void Stack::Print(){
if(Empty()){
return;
}
pPerson x=Top();
Pop();
Print();
PushPtr(x);
}
//Function to recieve the "x" pointer
void Stack::PushPtr(pPerson object){
pPerson newP;
newP=object;
if(size==0){
newP->next=NULL;
top=newP;
}
else{
newP->next=top;
top=newP;
}
size++;
}
正如我所说,队列做同样的事情,但搞清楚什么问题就在这里,即时通讯相当肯定,我会解决的队列: -/
在此先感谢。
答
栈步道通常做这种方式:
void Stack::Print(){
pPerson cur = top;
while (cur != nullptr) {
cur->printIt(); // other print function.
cur = cur->next;
}
}
除非有一些存在的理由弹出堆栈,并将它推回。
请包括您的'Stack'声明。我仍然不知道“动态”或“静态”堆栈的含义。 – 2014-11-06 17:37:47
它如何崩溃 - 调试器说什么? – pm100 2014-11-06 17:38:06
使用递归进行打印并不好。它不是必需的,你的堆栈需求增长无限 - 在尾递归(lisp,..)的语言中可能没问题,但C不是其中之一(一般情况下) – pm100 2014-11-06 17:39:39