求高手指教
栈的push、pop序列。具体描述,输入两个整数序列。其中一个序列表示栈的push顺序,判断另一个序列有没有可能是对应的pop顺序。为了简单起见,我们假设push序列的任意两个整数都是不相等的。比如输入的push序列是1、2、3、4、5,那么4、5、3、2、1就有可能是一个pop系列。因为可以有如下的push和pop序列:push 1,push 2,push 3,push 4,pop,push 5,pop,pop,pop,pop,这样得到的pop序列就是4、5、3、2、1。但序列4、3、5、1、2就不可能是push序列1、2、3、4、5的pop序列。
代码如何实现?
栈的push、pop序列。具体描述,输入两个整数序列。其中一个序列表示栈的push顺序,判断另一个序列有没有可能是对应的pop顺序。为了简单起见,我们假设push序列的任意两个整数都是不相等的。比如输入的push序列是1、2、3、4、5,那么4、5、3、2、1就有可能是一个pop系列。因为可以有如下的push和pop序列:push 1,push 2,push 3,push 4,pop,push 5,pop,pop,pop,pop,这样得到的pop序列就是4、5、3、2、1。但序列4、3、5、1、2就不可能是push序列1、2、3、4、5的pop序列。
代码如何实现?
解决方案 »
- 为啥没全取出来
- 初学者的问题,很急
- 分数有什么用,怎么查看自己有多少分?
- 求解 用java发送邮件的问题
- 求救:急,解决问题马上给分。。。。关于servlet自动定时器的问题,,,下面是我的sevlet类,问题是它为什么在每次服务器开启的时候会执
- applet中的JTextField不能够接受拷贝吗?(高分请教)
- 怎么进行email地址的检查?
- applet(刚从c++过来请多指教)
- 请教有关 UML 的问题
- applet 能不能直接访问在不同机器上的orace 数据库???(紧急求助!!!)
- dom4j解析xml每修改一次增加一个空行,是什么原因,如何解决?
- java POI操作excel,不支持linux?
可能出栈:
5 4 3 2 1
4 5 3 2 1
4 3 5 2 1
4 3 2 5 1
4 3 2 1 5
3 5 4 2 1
3 4 5 2 1
3 4 2 5 1
3 4 2 1 5
3 2 5 4 1
3 2 4 5 1
3 2 4 1 5
3 2 1 5 4
3 2 1 4 5
2 5 4 3 1
2 4 5 3 1
2 4 3 5 1
2 4 3 1 5
2 3 5 4 1
2 3 4 5 1
2 3 4 1 5
2 3 1 5 4
2 3 1 4 5
2 1 5 4 3
2 1 4 5 3
2 1 4 3 5
2 1 3 5 4
2 1 3 4 5
1 5 4 3 2
1 4 5 3 2
1 4 3 5 2
1 4 3 2 5
1 3 5 4 2
1 3 4 5 2
1 3 4 2 5
1 3 2 5 4
1 3 2 4 5
1 2 5 4 3
1 2 4 5 3
1 2 4 3 5
1 2 3 5 4
1 2 3 4 5 附相关算法:import java.util.LinkedList;
import java.util.Stack;public class TestIO {
/**
* 穷举每一种可能的出栈序列
* @param inQueue
* @param stack
* @param outQueue
*/
public static void getStackSequence(LinkedList<String> inQueue,Stack<String> stack,LinkedList<String> outQueue){
if(inQueue.isEmpty()&&stack.isEmpty()){
//输出可能的出栈序列
while(!outQueue.isEmpty()){
System.out.print(outQueue.poll()+" ");
}
System.out.println();
}else if(!inQueue.isEmpty()&&!stack.isEmpty()){
//保存现场
LinkedList<String> tempInQueue=new LinkedList<String>(inQueue);
LinkedList<String> tempOutQueue=new LinkedList<String>(outQueue);
Stack<String> tempStack=new Stack<String>();
for(int i=0;i<stack.size();i++) tempStack.push(stack.get(i));
//队首元素入栈
stack.push(inQueue.poll());
getStackSequence(inQueue, stack, outQueue);
//还原现场
inQueue=tempInQueue;
outQueue=tempOutQueue;
stack=tempStack;
//栈顶元素出栈
outQueue.offer(stack.pop());
getStackSequence(inQueue, stack, outQueue);
}else if(!inQueue.isEmpty()&&stack.isEmpty()){
//队首元素入栈
stack.push(inQueue.poll());
getStackSequence(inQueue, stack, outQueue);
}else if(inQueue.isEmpty()&&!stack.isEmpty()){
//栈顶元素出栈
outQueue.offer(stack.pop());
getStackSequence(inQueue, stack, outQueue);
}else{
}
}
/**
* 封装输出,获得内部算法所需要的接口
* @param in
* @param out
*/
private static void init(String[] in){
Stack<String> stack=new Stack<String>();
LinkedList<String> outQueue=new LinkedList<String>();
LinkedList<String> inQueue=new LinkedList<String>();
for(int i=0;i<in.length;i++) inQueue.add(in[i]);
getStackSequence(inQueue, stack, outQueue);
}
public static void main(String[] args){
String[] in={"1","2","3","4","5"}; //入栈顺序
init(in);
}
}