队列和栈面试题(一)— 请编写一个程序,按升序对栈进行排序,要求最多只能使用一个额外的栈存放临时数据
来源:互联网 发布:微星 网络唤醒 编辑:程序博客网 时间:2024/05/24 07:44
题目:请编写一个程序,按升序对栈进行排序,要求最多只能使用一个额外的栈存放临时数据,但不得将元素复制到别的数据结构中。
思路:首先申请一个栈sta来存放数据栈,再申请一个辅助栈help来存放临时数据,然后比较sta弹出的栈顶的值res与help栈顶元素的大小。
当sta栈不为空时:
1、如果help.empty()或者res<=help.top(),那么就把res的值压入help栈中;
2、如果help不为空并且res>help.top(),那么就把help中栈顶的值弹出并压入sta栈,最后把res的值压入help栈中。
具体可看如下过程图:
示例代码:
#include<iostream>#include<string>#include<stack>//pop,top,push#include<vector>using namespace std;class TwoStacks {public: vector<int> twoStacksSort(vector<int> numbers) { stack<int> sta; for(vector<int>::reverse_iterator riter=numbers.rbegin();riter!=numbers.rend();riter++) sta.push(*riter); StackSort(sta); vector<int> res; while(!sta.empty()) { res.push_back(sta.top()); sta.pop(); } return res; } void StackSort(stack<int> &sta) { stack<int> help; while(!sta.empty()) { int res=sta.top(); sta.pop(); if(help.empty()||res<=help.top()) help.push(res); else { while(!help.empty()&&res>help.top()) { sta.push(help.top()); help.pop(); } help.push(res); } } while(!help.empty()) { sta.push(help.top()); help.pop(); } }};int main(){ int a[5]={1,2,3,4,5}; TwoStacks A; vector<int> arr(a,a+5),res; res=A.twoStacksSort(arr); for(vector<int>::iterator iter=res.begin();iter!=res.end();iter++) cout<<*iter<<" "; return 0;}
0 0
- 队列和栈面试题(一)— 请编写一个程序,按升序对栈进行排序,要求最多只能使用一个额外的栈存放临时数据
- 用一个额外的栈对栈进行升序排序
- 9.3栈和队列(八)——按升序对栈进行排序
- 程序员面试金典: 9.3栈与队列 3.6编写程序,按升序对栈进行排序(即最大元素位于栈顶)
- 【数据结构】对一个数组按给定的下标排序,仅使用两两交换的方式,要求不能对数组进行扩容尽可能使用额外少的空间
- 3.编写一个C程序,实现对10个整数进行升序排序输出。
- 【Java】按升序对栈进行排序
- 按升序对栈进行排序
- 按升序对栈进行排序
- 编写一个使用数组类模板Array对数组进行排序、求最大值和求元素和的程序,并采用相关数据进行测试。
- 编写一个使用数组类模板Array对数组进行排序、求最大值和求元素和的程序,并采用相关数据进行测试。
- 以字符串中出现次数最多的字符的个数为权值,对一个字符串数组进行升序排序
- 一道面试题:对一个数组进行排序,要求第一个最大、第二
- 栈和队列面试题(一)---一个数组实现两个栈
- 栈和队列的面试题(四)---用两个栈实现一个队列
- 两个栈实现一个队列——栈和队列面试题(2)
- 两个队列实现一个栈——栈和队列面试题(3)
- 面试题(两个栈实现一个队列和两个队列实现一个栈)
- Android进阶之路 - HttpURLConnection的使用详解
- 1085. Perfect Sequence (25)
- C++/C素数判断
- 15.2 广播
- [BZOJ3698]XWW的难题(有源汇有上下界的最大流)
- 队列和栈面试题(一)— 请编写一个程序,按升序对栈进行排序,要求最多只能使用一个额外的栈存放临时数据
- 框架模式 MVC 在Android中的使用
- 蟠桃记
- 统计字符串中每个字符出现的次数
- java8并行流操作
- linux下jsoncpp编译与使用
- 3.htm标签块及和行内
- Spring AOP(xml)
- 正则表达式基本元字符集