棧佇列例題1:設定帶最小值的棧
阿新 • • 發佈:2019-01-04
思路:
設定一個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 }