【问题标题】:How to show all elements in dynamic stack and queue (c++)如何显示动态堆栈和队列中的所有元素(C++)
【发布时间】: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,最有可能是当堆栈为空时。

标签: c++ stack


【解决方案1】:

堆栈遍历通常以这种方式完成:

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

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

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

【讨论】:

  • 好吧,我知道我可以只遍历节点,但我的教授坚持我应该只访问顶部,所以如果我想访问前一个元素,我必须弹出,然后显示再次登顶。
  • @dualdark,您应该在帖子中说明这一点。这是执行 print() 的要求。
猜你喜欢
  • 1970-01-01
  • 2014-07-11
  • 2021-09-13
  • 2013-09-18
  • 2015-07-04
  • 2018-09-20
  • 2013-09-30
  • 2013-12-27
  • 1970-01-01
相关资源
最近更新 更多