如何在动态堆栈和队列中显示所有元素(c ++)

时间:2014-11-06 17:36:05

标签: c++ stack

我需要显示堆栈和队列的所有元素,使用静态结构我使用了递归函数,但是使用动态它根本不能正常工作。

当我使用这些函数时,它会正确显示元素,但在此之后,无论我做什么,程序都会崩溃。

另外,为了做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++;
}

正如我所说,队列正在做同样的事情,但是弄清楚这里的问题是什么,我很确定我会修复队列: - /

提前致谢。

1 个答案:

答案 0 :(得分:0)

堆栈散步通常以这种方式完成:

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

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

除非存在一些存在的理由来弹出堆叠并将其重新打开。