如何使用递归反转打印堆栈?

时间:2016-05-29 08:04:16

标签: c++ recursion data-structures stack

  

请注意,它只是反向打印而不是反转堆栈

我想要做的是借助递归打印堆栈,即从下到上打印。

我已经尝试过了,但结果并不是我所期望的。我的代码看起来像这样。

#include <bits/stdc++.h>
using namespace std;


void print(stack<char>st){
   if(st.empty()){return;}
   st.pop();
   print(st);
   cout<<st.top();
}

 int main() {
    // Assume that I have stack already made....
    print(st);
    cout<<endl;
 }
 return 0;
}

有人会介意指出我的错误吗?此外,当我通过引用传递堆栈时,结果是意外的。感谢您的支持。

2 个答案:

答案 0 :(得分:3)

为什么不将st.top()存储在变量中并稍后打印。

void print(stack<char>st)
{
    if(st.empty())
    {
        return;
    }

    char top = st.top();
    st.pop();
    print(st);

    cout<<top<<endl;
}

让我解释一下: -

假设,你的堆栈 - &gt; 0,1

此处,呼叫层次结构

  1. print({0, 1}) { // stack after pop -- {0} print({0}) }
  2. print({0}) { // stack after pop -- {} print ({}) // here you want to print top of empty stack // which gives the exception }

答案 1 :(得分:0)

  

pop是函数get元素打印像反向

 void printStack()
{
   if(!isEmpty())
   {
     int temp = pop();
     printStack();
     printf(" %d ", temp);
     push( temp);
   }
}

int pop() 
{
  if (isEmpty())
    printf("Stack is Empty...\n");
  else {
      st.top = st.top - 1;
      return st.array[st.top+1];
   }
}