模拟一个数字序列压栈出栈操作,输出所有出栈数字序列
2013-04-03 20:11
274 查看
#include <iostream> #include <stack> #include <vector> using namespace std; static int count=0; /** mystack:代表堆栈 input:代表要压入堆栈的数字序列 output:代表弹出堆栈的数字序列 */ void countSequeue(stack<int> mystack,vector<int> input,vector<int> output){ /** 当input为空时,说明等待进栈的队列为空,展示结果:将前面出栈数字和栈中的数字打印出来 */ if(input.empty()){ for(vector<int>::iterator b=output.begin();b<output.end();b++){ cout<<*b<<" "; } while(!mystack.empty()){ int value=mystack.top(); cout<<value<<" "; mystack.pop(); } cout<<endl<<"执行次数"<<++count<<endl; return; } /** 将原来的栈复制到两个栈中,给下面两个递归函数使用 */ stack<int> tmp,newstack,newstack2; while(!mystack.empty()){ tmp.push(mystack.top()); mystack.pop(); } while(!tmp.empty()){ newstack.push(tmp.top()); newstack2.push(tmp.top()); tmp.pop(); } /** 将input复制一份留给下一个递归函数使用 */ vector<int> tmpinput=input; //首先将下一个数压入堆栈中,进行迭代 newstack.push(input.front()); input.erase(input.begin()); countSequeue(newstack,input,output); //进行下一种情况,就是先将堆栈中的数弹出,进行迭代 if(!newstack2.empty()){ output.push_back(newstack2.top()); newstack2.pop(); countSequeue(newstack2,tmpinput,output); } } int main(){ stack<int> mystack; vector<int> output; vector<int> input; for(int i=0;i<3;i++) input.push_back(i+1); countSequeue(mystack,input,output); return 0; }
解释:采用递归的方式模拟数字序列压栈出栈操作,能够输出搜索的出栈序列,对一个{1,2,3}的序列,出栈结果如下
3 2 1 执行次数1 2 3 1 执行次数2 2 1 3 执行次数3 1 3 2 执行次数4 1 2 3 执行次数5 Press any key to continue
相关文章推荐
- 对于一个入栈序列输出所有的出栈序列
- 给一串数字,输出所有的出栈序列
- 有一个队列 ABCDEFG, 现有一个堆栈, 有三种操作, 出队, 入栈,出栈. 输出可以是出队操作也可以是出栈操作.试问如何判断某一序列不是无法输出的?
- 获取一个数二进制序列中所有的偶数位和奇数位,分别输出二进制序列
- 汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZde
- 1.写一个函数返回参数二进制中1的个数2.获取一个数二进制序列中所有的偶数为和奇数位,分别输出二进序列3.输出一个整数的每一位4.编程实现:两个int(32位)整数m和n的二进制表达中,有多少个位(b
- 输入一个整数,输出所有可能的整数序列,使得序列中的整数之和等于输入的整数
- 获取一个数二进制序列中所有的偶数位和奇数位,分别输出二进制序列
- c语言:获取一个数二进制序列中所有的偶数位和奇数位,分别输出二进制序列。
- 反序输出一个int型数组中所有数组元素(数字或字符)的值
- 如何用C语言获取一个数二进制序列中所有的偶数位和奇数位,分别输出二进制序列
- 输入一个正数n,输出所有和为n连续正整数序列
- 输入一个表达式,没有括号,数字小于0-9之间,输出计算结果,所有的中间结果化为整形。 例如: 输入:3+8×2/9-2 输出:2
- 给定一个入栈序列,求所有可能的出栈序列
- 获取一个数二进制序列中所有的偶数位和奇数位,分别输出二进制序列。
- 输出一个整数的所有数字
- 输入一个正数n,输出所有和为n 连续正数序列
- 获取一个数二进制序列中所有的偶数位和奇数位,分别输出二进制序列
- 文章标题编写一个在1,2,…,9(顺序不能变)数字之间插入+或-或什么都不插入,使得计算结果总是100的程序,并输出所有的可能性。
- 随意输入一个正整数n, 在输入转化的进制数,将转化后的序列输出,并判断某一个数字的个数,这里给的是二进制的例子