创建包含min()函数的栈

package 栈;

/**

 * 设计含最小函数min()的栈,要求min、push、pop的时间复杂度都是O(1)

 *

 * 思路:用数据栈和最小数据栈来模拟一个含有最小函数min()的栈,其中,最小数据栈存储的是数据栈中的最小元素

 *

 * @author LiZhe

 */

public class MinStack {

Stack dataStack = new Stack();//定义存储数据的栈

Stack minStack = new Stack();//定义存储最小数据的栈

/**

 * 添加数据

 *

 * 思路:首先向数据栈中添加数据,然后要判断最小数据栈是否为空,若为空,或者,最小数据栈中的峰值比新添加的元素大,

 * 也将新元素添加到最小数据栈中

 * @param data

 */

public void push(int data){

dataStack.push(data);

if(minStack.isEmpty() || minStack.peek()>data){

minStack.push(data);

}

}

/**

 * 从栈中取元素

 *

 * 思路:如果数据栈为空,直接返回null

 * 如果数据栈不为空,从数据栈中弹出栈顶元素,并返回

 * 如果最小数据栈的栈顶元素与数据栈弹出的元素相同,那么最小数据栈也要弹出元素

 * @return

 */

public Integer pop(){

if(dataStack.isEmpty()){

return null;

}

Integer data = dataStack.pop();

if(data == minStack.peek()){

minStack.pop();

}

return data;

}

/**

 * 查看栈的峰值

 * @return

 */

public Integer peek(){

return dataStack.peek();

}

/**

 * 查看栈中的最小元素

 * @return

 */

public Integer min(){

return minStack.peek();

}

/**

 * 主函数

 * @param args

 */

public static void main(String[] args) {

MinStack minStack = new MinStack();

minStack.push(4);

minStack.push(3);

minStack.push(8);

minStack.push(6);

System.out.println("查看栈中的最小元素:");

System.out.println(minStack.min());

}

}

猜你喜欢

转载自blog.csdn.net/lz1170063911/article/details/80095310