我需要显示堆栈和队列的所有元素,使用静态结构我使用了递归函数,但是使用动态它根本不能正常工作。
当我使用这些函数时,它会正确显示元素,但在此之后,无论我做什么,程序都会崩溃。
另外,为了做print(),一个例子是它假设我只能访问顶部,所以如果我显示顶部,我看不到前一个节点,除非我弹出当前的顶部,然后显示新的顶部。
这是动态堆栈的代码:
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++;
}
正如我所说,队列正在做同样的事情,但是弄清楚这里的问题是什么,我很确定我会修复队列: - /
提前致谢。
答案 0 :(得分:0)
堆栈散步通常以这种方式完成:
void Stack::Print(){
pPerson cur = top;
while (cur != nullptr) {
cur->printIt(); // other print function.
cur = cur->next;
}
}
除非存在一些存在的理由来弹出堆叠并将其重新打开。