<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 241,  comments - 116,  trackbacks - 0
    題目:定義棧的數據結構,要求添加一個min函數,能夠得到棧的最小元素。要求函數min、push以及pop的時間復雜度都是O(1)。 實現思路:們需要一個輔助棧。每次push一個新元素的時候,同時將最小元素(或最小元素的位置。考慮到棧元素的類型可能是復雜的數據結構,用最小元素的位置將能減少空間消耗)push到輔助棧中;每次pop一個元素出棧的時候,同時pop輔助棧。
    package stack;

    import java.util.ArrayList;

    /**
     * 實現包含min函數的棧
     * @author DHC
     * @param <T>
     */
    public class MinInStack<T> {

        public static void main(String[] args) {
            MinInStack<Integer> newStack = new MinInStack<Integer>();
            newStack.push(4);
            newStack.push(6);
            newStack.push(2);
            newStack.push(5);
            newStack.pop();
            newStack.pop();
            newStack.push(1);
            System.out.println(newStack.min());
        }
        
        public ArrayList<T> stack = new ArrayList<T>();
        
        public ArrayList<Integer> minStack = new ArrayList<Integer>();
        
        public T pop() {
            int size = stack.size();
            minStack.remove(size - 1);
            return stack.remove(size - 1);
        }
        
        public void push(T item) {
            int size = stack.size();
            
            if (size == 0) {
                minStack.add(0);
            } else {
                int minPosition = minStack.get(size - 1);
                T minData = stack.get(minPosition);
                
                if (compare(minData, item)) {
                    minStack.add(stack.size());
                } else {
                    minStack.add(minPosition);
                }
            }
            
            stack.add(item);
        }
        
        public T peek() {
            int size = stack.size();
            return stack.get(size - 1);
        }
        
        public T min() {
            int size = minStack.size();
            return stack.get(minStack.get(size - 1));
        }
        
        public boolean isEmpty() {
            return stack.isEmpty();
        }

        /**
         * 泛型元素的比較方法
         * @param minData
         * @param item
         * @return true 代表當前元素小于之前的最小元素
         */
        private boolean compare(T minData, T item) {
            // 這兒不同的泛型類型可以用不同的方式實現
            // 如果寫成通用代碼泛型之間應該腫么比較大小呢?是不是可以讓泛型都繼承某一接口呢?
            int a = (Integer) minData;
            int b = (Integer) item;
            if(a > b) {
                return true;
            } else {
                return false;
            }
        }
    }
    posted on 2012-01-31 15:57 墻頭草 閱讀(1060) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    人人游戲網 軟件開發網 貨運專家
    主站蜘蛛池模板: 色费女人18女人毛片免费视频| 亚洲精品第一国产综合野| 岛国大片免费在线观看| 亚洲色偷偷av男人的天堂| 在线观看肉片AV网站免费| 女人18毛片a级毛片免费| 亚洲欧洲日韩极速播放| 成年大片免费视频| 亚洲成av人无码亚洲成av人| 免费看的一级毛片| 韩国亚洲伊人久久综合影院| 国产精品无码一区二区三区免费| 亚洲Av无码国产一区二区| 国产自产拍精品视频免费看| 国产亚洲Av综合人人澡精品| 亚洲国产人成中文幕一级二级| a高清免费毛片久久| 久久久青草青青亚洲国产免观| 久久久久久久久久国产精品免费 | 亚洲国产综合91精品麻豆| 无码人妻一区二区三区免费看| 久久久亚洲AV波多野结衣| 黄页网站免费观看| 亚洲精品成a人在线观看☆| 国产精品无码一二区免费| 韩国免费a级作爱片无码| 91精品国产亚洲爽啪在线影院| 青青青国产在线观看免费网站| 亚洲国产精品美女久久久久| 亚洲国产成人久久一区久久| a级毛片毛片免费观看久潮喷| 久久亚洲日韩精品一区二区三区| 亚洲性线免费观看视频成熟| 日韩成人精品日本亚洲| 亚洲AV无码专区国产乱码电影| 久草视频在线免费| 欧洲精品码一区二区三区免费看| 久久青青成人亚洲精品| 四虎影院在线免费播放| 中文字幕看片在线a免费| 2017亚洲男人天堂一|