双栈排序之程序员面试经典

题目描述

请编写一个程序,按升序对栈进行排序(即最大元素位于栈顶),要求最多只能使用一个额外的栈存放临时数据,但不得将元素复制到别的数据结构中。

给定一个int[] numbers(C++中为vector<int>),其中第一个元素为栈顶,请返回排序后的栈。请注意这是一个栈,意味着排序过程中你只能访问到第一个元素。

package com.mianshi;

import java.util.ArrayList;
import java.util.Stack;

public class jingdian_16 {

	public static void main(String[] args) {
		int[] numbers =new int[]{2,1,5,3,4};
		ArrayList list =jingdian_16.twoStacksSort(numbers);
		for(int i=0;i twoStacksSort(int[] numbers) {
        //栈1存储数据
		Stack  stack1 =new Stack();
		//栈2临时存储
		Stack  stack2 =new Stack();
		ArrayList list =new ArrayList();
		
		for(int i=0;ia){
            	      //如果成立则有,将stack2中的栈顶数据弹出放到stack1
            	   stack1.push(stack2.pop());
            	   //继续循环判断是否还有符合条件的
               }
               //循环之后就需要将stack1弹出的数据放到stack2中
               stack2.push(a);
		}
	    //遍历输出
		while(!stack2.isEmpty()){
			list.add(stack2.pop());
		}
         return list;		
    }

}



你可能感兴趣的:(程序员面试经典编程题)