全部合法顺序——对栈和队列的应用
来源:互联网 发布:linux中socket通信 编辑:程序博客网 时间:2024/06/06 01:35
全部合法顺序
——对栈和队列的应用
大家还记得判断出栈顺序是否合法那道题吗。。。
现在拓展一下,题目要求输入n,并且输出它出栈的所有合法排序。。。
#include<iostream>using namespace std;#include<stdio.h>#define MaxSize 100int n;int Stack[MaxSize];//顺序栈int Queue[MaxSize];//顺序对void fun2(int rear,int top,int i)//作用:处理第i个进入轨道{int j;if(rear==n)//n个元素已全部入队,并输出此时的队列{for(j=1;j<=n;j++)cout<<Queue[j]<<" ";cout<<endl;}else{if(top>-1)//若栈不空{rear++;//队尾指针后移Queue[rear]=Stack[top];//出栈一个元素并把它入队top--;//栈顶指针前移fun2(rear,top,i);//递归处理第一种情况top++;//恢复处理前的状态Stack[top]=Queue[rear];rear--;}if(i<=n)//若转轨栈右边还有元素未处理{top++;//编号为i的元素进栈Stack[top]=i;fun2(rear,top,i+1);//递归处理第二种情况}}}int main(){scanf("%d",&n);fun2(0,-1,1);return 0;}
详解:在右边的轨道上有n个车皮顺序排列,求他在左边轨道上所有可能得到的车皮编号顺序。。。
左边的轨道用顺序队列表示,转轨栈用顺序栈表示。假设在某一时刻,队尾指针为rear,栈顶指针为top,编号为i的车皮来到转轨栈的入口处,这种状态情况下,处理方法用递归。输出栈顶元素,那么,队列中就多了一个元素,栈中就少了一个元素,转轨栈入口处的车皮标号一样是i。还有一种情况。i进栈。那么,队列中元素不变,栈中元素多了一个,转轨栈入口处的车皮编号变成了i+1,此时也用递归即可。。。
0 0
- 全部合法顺序——对栈和队列的应用
- 实验3:栈和队列的基本操作实现及其应用——顺序队列和链队列
- 实验三:栈和队列的基本操作实现及其应用——顺序栈
- 实验3:栈和队列的基本操作实现及其应用——顺序栈和链栈
- 顺序队列的应用
- 卡特兰数(Catalan)应用:输出所有N对合法括号序列和输出所有已知进栈序列的合法出栈序列
- 循环队列——队列的顺序表示和实现
- 循环队列——队列的顺序表示和实现
- 循环队列——队列的顺序表示和实现
- 实验4:栈和队列的基本操作实现及其应用之《顺序队列》
- 实验4:栈和队列的基本操作实现及其应用之《顺序队列》
- 你的出栈顺序合法吗?
- 顺序队列和链式对列的插入方法
- 顺序栈和顺序队列
- 实验二 栈和队列——顺序栈、顺序队列
- 顺序栈和队列
- 实验4:栈和队列的基本操作实现及其应用之《顺序栈》
- 实验4:栈和队列的基本操作实现及其应用之《顺序栈》
- SAP SD 销售佣金在Billing中预提
- 数据库表设计三大范式原则
- java中相对路径
- Linux C一站式学习习题答案12.3.3迷宫问题深度优先
- 将tomcat加入到linux service中,并支持多个tomcat。
- 全部合法顺序——对栈和队列的应用
- 堆和栈
- SMI接口简介(基于IP113F芯片的学习)
- Git创建和公钥生成
- powerdesigner16破解步骤
- SQL核心语句(非常实用的几个技巧)
- IOS 判断手机设备上是否安装某款应用
- [HTML]显示/隐藏DIV的技巧(visibility与display的差别)
- windows 下删除服务