帮我写一个JAVA,判断栈进出顺序是否正确的编程题
时间: 2023-05-31 09:02:39 浏览: 101
以下是一个简单的Java程序,用于判断给定的栈进出顺序是否正确:
```java
import java.util.*;
public class StackOrderChecker {
public static boolean isOrderValid(int[] pushOrder, int[] popOrder) {
if (pushOrder == null || popOrder == null || pushOrder.length != popOrder.length) {
return false;
}
Stack<Integer> stack = new Stack<>();
int pushIndex = 0;
int popIndex = 0;
while (popIndex < popOrder.length) {
while (stack.isEmpty() || stack.peek() != popOrder[popIndex]) {
if (pushIndex == pushOrder.length) {
return false;
}
stack.push(pushOrder[pushIndex++]);
}
stack.pop();
popIndex++;
}
return true;
}
public static void main(String[] args) {
int[] pushOrder = {1, 2, 3, 4, 5};
int[] popOrder1 = {4, 5, 3, 2, 1};
int[] popOrder2 = {4, 3, 5, 1, 2};
System.out.println(isOrderValid(pushOrder, popOrder1)); // true
System.out.println(isOrderValid(pushOrder, popOrder2)); // false
}
}
```
这个程序使用了一个栈来模拟入栈和出栈操作,以检查给定的进出顺序是否正确。具体来说,程序首先检查传入的进出栈序列是否合法,然后遍历出栈序列,依次将栈中元素与出栈序列元素进行比较,如果不相等,则一直将入栈序列中的元素压入栈中,直到找到与当前出栈元素相等的栈顶元素,然后将其弹出。如果栈已经为空,但还没有找到相等的元素,则说明出栈序列不合法。最后,程序检查栈是否为空,如果为空,则表示出栈序列合法,否则不合法。
阅读全文