如何显示动态堆栈和队列中的所有元素(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++; 
} 

正如我所说,队列做同样的事情,但搞清楚什么问题就在这里,即时通讯相当肯定,我会解决的队列: -/

在此先感谢。

+0

请包括您的'Stack'声明。我仍然不知道“动态”或“静态”堆栈的含义。 – 2014-11-06 17:37:47

+1

它如何崩溃 - 调试器说什么? – pm100 2014-11-06 17:38:06

+1

使用递归进行打印并不好。它不是必需的,你的堆栈需求增长无限 - 在尾递归(lisp,..)的语言中可能没问题,但C不是其中之一(一般情况下) – pm100 2014-11-06 17:39:39

栈步道通常做这种方式:

void Stack::Print(){ 
    pPerson cur = top; 

    while (cur != nullptr) { 
    cur->printIt(); // other print function. 
    cur = cur->next; 
    } 
} 

除非有一些存在的理由弹出堆栈,并将它推回。

+0

好吧,我知道我可以走节点,但我的专家坚持我应该只有顶部,所以如果我想访问以前的元素,我必须弹出,然后再显示顶部。 – dualdark 2014-11-06 17:59:54

+0

@dualdark,你应该在你的文章中说明。这是执行print()的要求。 – StarPilot 2014-11-06 18:06:42