1. 程式人生 > >棧佇列例題1:設定帶最小值的棧

棧佇列例題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 }