栈队列例题1:设置带最小值的栈

思路:

  设置一个A栈类,在A栈类中在声名另一个B栈类的对象,这个对象主要用于存储最小值的,每次当用A栈类的对象压入元素时同时也对B栈类的对象中的上一个比较后,也进行压入。A栈类的对象弹栈时,B栈类的对象也同时弹栈。这样A栈类中的min方法里只需要对B栈类的对象.peek( )就行了。

代码如下:

  1.接口

 1 public interface IStack<T>{
 2 
 3     //元素入栈
 4     void push(T e);
 5     
 6     //弹出栈顶
 7     T pop();
 8     
 9     //查看栈顶元素
10     T peek();
11     
12     
13 }

  2.StackMin类

 1 import java.util.EmptyStackException;
 2 import java.util.LinkedList;
 3 
 4 public class StackMin<T> extends LinkedList<T> implements IStack<T>{
 5     
 6     @Override
 7     public void push(T e) {
 8         super.addLast(e);;    
 9         }
10         
11         
12     
13 
14     @Override
15     public T pop() {
16         if(getSize()<=0) throw new EmptyStackException();
17         T value=super.removeLast();
18         return value;
19         
20     }
21 
22     @Override
23     public boolean isEmpty() {
24         
25         return getSize()>0;
26     }
27     
28     @Override
29     public T peek() {
30         if(getSize()<=0) throw new EmptyStackException();
31         return super.getLast();
32     }
33 
34     public int getSize()
35     {
36         return super.size();
37     }
38 
39 
40     
41 }

  3.MyStack类

 1 import java.util.EmptyStackException;
 2 import java.util.LinkedList;
 3 
 4 public class MyStack<T> extends LinkedList<T> implements IStack<T>{
 5     StackMin<T> minnode=new StackMin<T>();
 6     
 7     @Override
 8     public void push(T e) {
 9         super.addLast(e);;
10         if(minnode.getSize()==0)
11         {
12             minnode.push(e);
13         }else {
14             if((int)minnode.peek()<(int)e)
15             {
16                 minnode.push(minnode.peek());
17             }else {
18                 minnode.push(e);
19             }
20             
21         }
22         
23         
24     }
25 
26     @Override
27     public T pop() {
28         if(getSize()<=0) throw new EmptyStackException();
29         T value=super.removeLast();
30         minnode.pop();
31         return value;
32         
33     }
34 
35     @Override
36     public boolean isEmpty() {
37         
38         return getSize()>0;
39     }
40     
41     @Override
42     public T peek() {
43         if(getSize()<=0) throw new EmptyStackException();
44         return super.getLast();
45     }
46 
47     public int getSize()
48     {
49         return super.size();
50     }
51 
52     
53     public int min() {
54         return (int) minnode.peek();
55     }
56 
57     
58 }

猜你喜欢

转载自www.cnblogs.com/LgxBoKeYuan/p/10219436.html
今日推荐