创建包含min()函数的栈
其他
2018-05-08 23:00:00
阅读次数: 4
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