现在的位置: 首页 > 综合 > 正文

66 颠倒栈

2018年05月02日 ⁄ 综合 ⁄ 共 766字 ⁄ 字号 评论关闭

66.颠倒栈。
题目:用递归颠倒一个栈。例如输入栈{1, 2, 3, 4, 5},1在栈顶。
颠倒之后的栈为{5, 4, 3, 2, 1},5处在栈顶。

/*
66.颠倒栈。
题目:用递归颠倒一个栈。例如输入栈{1, 2, 3, 4, 5},1在栈顶。
颠倒之后的栈为{5, 4, 3, 2, 1},5处在栈顶。

每一次试图颠倒一个栈的时候,现在栈顶元素pop出来,再颠倒剩下的元素组成的栈,
最后把之前的栈顶元素放到剩下元素组成的栈的底部。
递归结束的条件是剩下的栈已经空了
*/
#include <iostream>  
#include <stack>  
using namespace std;  
  
void PushToButtom(stack<int>*s,int ele)  
{  
    if(s->empty()) //栈是空的 直接放入 
    {  
        s->push(ele);  
        return;  
    }  
    else  
    {  
        int tmp=s->top();  //不是空的,依次出栈 
        s->pop();  
        PushToButtom(s,ele); //为空,ele放入栈底 
        s->push(tmp);  		//再依次进栈 
    }  
}  
  
void reverse(stack<int> *s)  
{  
    int top;
    if(!s->empty())
    {
    	top=s->top();  
    	s->pop();  //每次取出栈顶元素 
    	reverse(s);  //颠倒栈剩下的元素 
   	 	PushToButtom(s,top);  //把栈顶元素放入底部 
    }
}  
  
int main()  
{  
    stack<int> *s=new stack<int>;  
    for(int i=1;i<10;i++)//1 2 ...9 进栈 ,栈顶9 栈底1,出栈为9 8 7.... 
		s->push(i);
		
    reverse(s);  
    
    while(!s->empty()) //颠倒后9 8 7...1,栈顶1 栈底9,出栈为1 2 3.... 
    {  
        cout <<s->top()<< " ";  
        s->pop();  
    }  
  
} 

抱歉!评论已关闭.