筆試題:遞歸逆序棧

筆試題:遞歸逆序棧
如將棧{5,4,3,2,1}置爲{1,2,3,4,5}
分析:
(1)把{1, 2, 3, 4, 5}看成由兩部分組成:棧頂元素1和剩下的部分{2, 3, 4, 5},
把{2, 3, 4, 5}顛倒過來,變成{5, 4, 3, 2},然後把原來棧頂元素1放到底部,變成
{5, 4, 3, 2, 1};
(2)把{2, 3, 4, 5}看成由兩部分組成:棧頂元素2和剩下的部分{3, 4, 5},
把{3, 4, 5}先顛倒過來,變成{5, 4, 3},然後再把之前的棧頂元素2放到最底部,變成了{5, 4, 3, 2}。
……
這就是遞歸。
遞歸結束的條件是棧空.
總結:取出棧頂元素,棧逆序,將棧頂元素壓入棧底

stack<int>  ReverseStack(stack<int> stack)
{
   if(stack.size()=1) return stack;
    int top=stack.top();
    stack.pop();        //取出棧頂元素
    stack=ReverseStack(stack);//逆置棧 
    stack=PushStack(stack,top);//將棧頂元素壓入棧底;
    return stack;
}

stack<int>  PushStack(Stack<int> stack,int top)
{
   if(stack.empty())
   {
     stack.push(top);//棧爲空,將棧頂元素壓入棧底
   }
   else
   {
     int tmp=stack.top();//不爲空,將其他元素彈出後再壓入
     stack.pop();
     stack=PushStack(stack,top)
     stack.push(tmp);
   }
   return stack;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章