很多大厂的笔试题中都会要求面试者写一段栈排序,因为栈这个数据结构平时我们用的比较少,导致很多面试者一下子都有点懵逼,这里就来给大家解惑一下吧
题目:
- 一个栈中有10个随机大小的元素,这个是初始栈
- 可以让你申请一个空栈作为交换使用
- 不准使用任何其他数据结构进行存储
- 最终按照从小到大的顺序输出原始栈
思路:
- Stack这个数据结构的核心API我们必须要了解下,不然真的无从下手,Pop,Push,Peek三种核心操作
- Pop会让栈顶数据出栈,同时删除原始栈顶的数据
- Push添加元素到栈顶
- Peek获取栈顶元素,但是不删除原始栈顶的数据
- 栈是典型的先进先出型数据结构,了解核心API后我们就可以发现,其实我们只需要保证空栈的数据栈底是最小的即可
代码:
public class StackSort {
public static void main(String[] args) {
Stack<Integer> stack = new Stack();
for (int i = 0; i < 10; i++) {
stack.push( new Random().nextInt( 1000 ) );
}
Stack<Integer> tempStack = new Stack();
while (!stack.isEmpty()) {
Integer t = stack.pop();
while (!tempStack.isEmpty() && tempStack.peek() > t) {
stack.push( tempStack.pop() );
}
tempStack.push( t );
}
stack = tempStack;
while (!stack.isEmpty()){
System.out.println(stack.pop());
}
}
}