2 限定性线性表——栈与队列

1 栈与队列

   

1.1 包含min函数的栈

定义栈的数据结构,请在该类型中实现一个能够得到栈最小元素的min函数

在该栈中,调用min、push和pop方法

要求时间复杂度均为O(1)

算法思想:

  1. 要求时间复杂度均为 O(1),增加辅助空间实现,即增加一个辅助栈存储min值

  2. 例如:data 中依次入栈 5, 4, 3, 8, 10, 11, 12, 1, 则 min 中依次入栈 5, 4, 3,no,no, no, no, 1。

  3. no 代表此次不入栈,如果 min 中入栈的元素小于等于栈顶元素则入栈,否则不入栈。

 1 import java.util.Stack;
 2 public class Main
 3 {
 4     Stack<Integer> stack = new Stack<>();
 5     Stack<Integer> minStack = new Stack<>();
 6     public void push(int node)
 7     {
 8         stack.push(node);
 9         if(minStack.isEmpty() || minStack.peek() >= node)
10             minStack.push(node);
11     }
12     public void pop()
13     {
14         stack.pop();
15         if(stack.peek() == minStack.peek())
16         {
17             minStack.pop();
18         }
19     }
20     public int top()
21     {
22         return stack.peek();
23     }
24     public int min()
25     {
26         return minStack.peek();
27     }
28 }
算法描述

 

posted @ 2019-10-16 18:24  代号H  阅读(152)  评论(0编辑  收藏  举报