【发布时间】:2015-01-03 07:59:12
【问题描述】:
我需要显示堆栈和队列的所有元素,使用静态结构我使用递归函数,但动态它根本不能很好地工作。
当我使用函数时,它会正确显示元素,但之后,无论我做什么,程序都会崩溃。
另外,为了执行 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++;
}
正如我所说,队列正在做同样的事情,但是找出这里的问题,我很确定我会修复队列:-/
提前致谢。
【问题讨论】:
-
请附上您对
Stack的声明。而且我仍然不知道您所说的“动态”或“静态”堆栈是什么意思。 -
它是如何崩溃的——调试器说什么?
-
使用递归打印不好。它不需要,并且您的堆栈需求会无限增长-在具有尾递归(lisp,..)的语言中可能没问题,但 C 不是其中之一(通常)
-
调试器什么也没说,只是崩溃并关闭。动态是指动态大小,静态是指堆栈与数组
-
我的猜测是问题出在 pop 或 top,最有可能是当堆栈为空时。