美文网首页
辅助空间是常数级别的情况下,把栈的元素翻转

辅助空间是常数级别的情况下,把栈的元素翻转

作者: 拉丁看雪 | 来源:发表于2016-09-11 21:06 被阅读0次

include <iostream>

include <stack>

using namespace std;

void printInfo(stack<int> s)
{
int a ;
while(!s.empty())
{
a = s.top();
cout << a << " . " ;
s.pop();
}
cout << endl;
return ;
}

void reverseStack(stack<int> &s)
{
//如果接收到一个无效输入(空栈),返回
if(s.empty())
return ;
else
{
//如果s里面只有一个元素(此时是递归到底部,应该结束了),就返回,否则就不返回。具体实现是先pop出来一个,判断剩下的是不是空栈。
int a = s.top();
s.pop();
if(s.empty())
{
s.push(a);
return ;
}
else
{
s.push(a);
}
}
//真正的递归思想,就是不需要考虑递归的中间过程,只需要知道
// 1.上一层递归出来长成什么样子
// 2.这一层递归如何利用上一层递归的结果
// 3.结束递归的条件
//这里的核心思想还是两两交换(即是顶和底交换,当然,单个函数来看,不陷入递归的细节,就是两两交换)
int temp1 = s.top();
s.pop();
reverseStack(s);
int temp2 = s.top();
s.pop();
reverseStack(s);
s.push(temp1);
reverseStack(s);
s.push(temp2);
}

int main()
{
stack<int> s;
s.push(1);
s.push(2);
s.push(3);
s.push(4);
s.push(5);
cout << "-------------before recursion------------" << endl;
printInfo(s);

cout << "-------------after  recursion------------" << endl;
reverseStack(s);
printInfo(s);

return 0;

}

相关文章

  • 辅助空间是常数级别的情况下,把栈的元素翻转

    include include using namespace std; v...

  • 栈 问题

    155. 最小栈 常数时间内检索最小元素 使用一个辅助栈,与元素栈同步插入与删除,用于存储与每个元素对应的最小值。...

  • 用栈翻转

    用栈翻转 「栈翻转」是一个非常重要的性质, 有 字符串的翻转 整数的翻转 把栈转换成队列 0X00 栈翻转 整数的...

  • python-翻转栈中的元素-递归法

    给定一个栈stack,利用较低的空间复杂度将栈中的元素位置翻转。 这里我用了两个递归实现,外层递归:每次调用除栈顶...

  • 22、栈的压入、弹出序列

    剑指offer中的解释,没有什么所谓的辅助栈,就只有一个栈。如果当前栈顶元素不是想要弹出的元素,那么就接着把压栈序...

  • 逻辑之美(6)_归并排序

    开篇 上篇聊到的堆排序仅用线性对数级别的时间复杂度 O(n log n) 和常数级别的额外辅助空间即可将一个数组排...

  • 03-1

    1.固定数组实现栈 定义一个辅助空间index,一开始指向数组0的位置,所指位置即入栈或者出栈的位置。每次一个元素...

  • 155. Min Stack

    设计一个支持push、pop、top、在常数时间内检索最小元素的栈。 解法: 数组存储元素的值和小于当前栈中最小元...

  • LeetCode:最小栈

    155. 最小栈 设计一个支持 push ,pop ,top 操作,并能在常数时间内检索到最小元素的栈。push(...

  • 5、数据结构

    1、最小栈—* 设计一个支持 push,pop,top 操作,并能在常数时间内检索到最小元素的栈。push(x) ...

网友评论

      本文标题:辅助空间是常数级别的情况下,把栈的元素翻转

      本文链接:https://www.haomeiwen.com/subject/nyouettx.html