• 栈队列例题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 }
  • 相关阅读:
    SharedPreferences数据、openFileOutput文件、SQLite数据库文件存储位置
    Android Activity 生命周期的透彻理解
    Android中半透明Activity效果另法
    android开发3:四大基本组件的介绍与生命周期
    Activity生命周期的学习以及Logcat的使用
    Android 之 Window、WindowManager 与窗口管理
    Android相关类关系
    android应用开发之Window,View和WindowManager .
    Android窗口管理服务WindowManagerService计算Activity窗口大小的过程分析
    Android应用程序窗口(Activity)的窗口对象(Window) 的创建过程分析
  • 原文地址:https://www.cnblogs.com/LgxBoKeYuan/p/10219436.html
Copyright © 2020-2023  润新知