成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

Stack的實現(xiàn)

gyl_coder / 768人閱讀

摘要:返回棧頂元素,未出棧出棧,返回棧頂元素,同時從棧中移除該元素棧頂元素,代表空棧棧容量,默認為存放元素的數(shù)組添加元素,從棧頂數(shù)組尾部插入擴容從棧頂添加元素復制元素更新棧頂

Stack Interface
package com.nasuf.arraylist;

public interface Stack {

    boolean isEmpty();
    
    void push(T data);
    
    /**
     * 返回棧頂元素,未出棧
     * @return
     */
    T peek();
    
    /**
     * 出棧,返回棧頂元素,同時從棧中移除該元素
     * @return
     */
    T pop();
    
}
Sequence Stack
package com.nasuf.arraylist;

import java.io.Serializable;
import java.util.EmptyStackException;

public class SeqStack implements Stack, Serializable {

    private static final long serialVersionUID = 7850303094177457725L;
    
    /**
     * 棧頂元素,-1代表空棧
     */
    private int top = -1;
    
    /**
     * 棧容量,默認為10
     */
    private int capacity = 10;
    
    /**
     * 存放元素的數(shù)組
     */
    private T[] array;
    
    private int size;
    
    public SeqStack(int capacity) {
        array = (T[]) new Object[capacity];
    }
    
    public SeqStack() {
        array = (T[]) new Object[this.capacity];
    }
    
    public int size() {
        return size;
    }
    

    @Override
    public boolean isEmpty() {
        return this.top == -1;
    }

    /**
     * 添加元素,從棧頂(數(shù)組尾部)插入
     * @param data
     */
    @Override
    public void push(T data) {
        if (array.length == size) 
            ensureCapacity(size*2+1); //擴容
        
        // 從棧頂添加元素
        array[++top] = data;
        size ++;
    }

    @Override
    public T peek() {
        if (isEmpty())
            throw new EmptyStackException();
        return array[top];
    }

    @Override
    public T pop() {
        if(isEmpty())
            throw new EmptyStackException();
        size --;
        return array[top--];
    }
    
    private void ensureCapacity(int capacity) {
        if (capacity < size)
            return;
        T[] old = array;
        array = (T[]) new Object[capacity];
        // 復制元素
        for (int i=0; i
LinkedStack
import java.io.Serializable;
import java.util.EmptyStackException;

public class LinkedStack implements Stack, Serializable{
    
    private static final long serialVersionUID = -4338010259113832656L;

    private static class Node {
        
        public AnyType data;
        public Node next;
        
        public Node() {
            
        }
        
        public Node(AnyType d) {
            data = d;
        }
        
        public Node(AnyType d, Node n) {
            data = d;
            next = n;
        }
    }
    
    private Node top;
    
    private int size;
    
    public LinkedStack() {
        this.top = new Node ();
    }
    
    public int size() {
        return size;
    }

    @Override
    public boolean isEmpty() {
        return top == null || top.data == null;
    }

    @Override
    public void push(T data) {
        if (data == null) {
            throw new StackOverflowError();
        }
        if (this.top == null) {
            this.top = new Node (data);
        } else if (this.top.data == null) {
            this.top.data = data;
        } else {
            Node p = new Node<>(data, this.top);
            top = p; //更新棧頂
        }
        size ++;
    }

    @Override
    public T peek() {
        if (isEmpty()) {
            throw new EmptyStackException();
        }
        return top.data;
    }

    @Override
    public T pop() {
        if (isEmpty()) {
            throw new EmptyStackException();
        }
        T data = top.data;
        top = top.next;
        size --;
        return data;
    }

}

文章版權歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/67410.html

相關文章

  • 算法面試:棧實現(xiàn)隊列方案

    摘要:解決方案二入隊都在中進行,用于隊列,同時保證所有元素都在一個棧里,且遵循以下約束入隊不管空與否,都將中的所有元素壓入中出隊若中不為空,則直接從中彈出元素若為空,則說明隊列為空,不能出隊。 聲明:碼字不易,轉(zhuǎn)載請注明出處,歡迎文章下方討論交流。 前言:Java數(shù)據(jù)結(jié)構與算法專題會不定時更新,歡迎各位讀者監(jiān)督。本篇文章介紹一個有趣的問題:用兩個棧實現(xiàn)一個隊列。這道題來自互聯(lián)網(wǎng)公司的算法面試...

    韓冰 評論0 收藏0
  • LeetCode 232:用棧實現(xiàn)隊列 Implement Queue using Stacks

    摘要:題目使用棧實現(xiàn)隊列的下列操作將一個元素放入隊列的尾部。用棧實現(xiàn)隊列,可以用兩個棧完成題解。入隊列時用存入節(jié)點,出隊列時內(nèi)節(jié)點順序出棧壓入中。這類編程語言就壓根不需要用隊列實現(xiàn)?;蛴脳崿F(xiàn)隊列這種問題,因為棧和隊列本身就必須借助實現(xiàn)。 題目: 使用棧實現(xiàn)隊列的下列操作: push(x) -- 將一個元素放入隊列的尾部。 pop() -- 從隊列首部移除元素。 peek() -- 返回隊...

    cloud 評論0 收藏0
  • Java集合Stack源碼深入解析

    概要 學完Vector了之后,接下來我們開始學習Stack。Stack很簡單,它繼承于Vector。學習方式還是和之前一樣,先對Stack有個整體認識,然后再學習它的源碼;最后再通過實例來學會使用它。 第1部分 Stack介紹 Stack簡介 Stack是棧。它的特性是:先進后出(FILO, First In Last Out)。 java工具包中的Stack是繼承于Vector(矢量隊列)的,由...

    edgardeng 評論0 收藏0
  • 每周一練 之 數(shù)據(jù)結(jié)構與算法(Stack

    摘要:二實現(xiàn)一個棧,并實現(xiàn)下面方法添加一個新元素到棧頂。移除棧頂?shù)脑?,同時返回被移除的元素。十進制轉(zhuǎn)換為二進制請輸入正確的數(shù)值方法簡單實現(xiàn)下面這個方法,其實不太好,因為沒有怎么用到這次要練習的棧方法,哈哈。 最近公司內(nèi)部在開始做前端技術的技術分享,每周一個主題的 每周一練,以基礎知識為主,感覺挺棒的,跟著團隊的大佬們學習和復習一些知識,新人也可以多學習一些知識,也把團隊內(nèi)部學習氛圍營造起來...

    hzx 評論0 收藏0
  • 劍指offer/LintCode40_用兩個棧模擬隊列

    摘要:劍指用兩個棧模擬隊列聲明文章均為本人技術筆記,轉(zhuǎn)載請注明出處解題思路實現(xiàn)功能用兩個棧模擬實現(xiàn)一個隊列的,和操作解題思路假設有兩個棧隊列實現(xiàn)始終用入棧實現(xiàn)隊列和實現(xiàn)由于依次出棧并壓入中,恰好保證中順序與模擬隊列順序一致,始終保證棧頂元素為模擬 劍指offer/LintCode40_用兩個棧模擬隊列 聲明 文章均為本人技術筆記,轉(zhuǎn)載請注明出處https://segmentfault.com...

    bawn 評論0 收藏0
  • 【算法】劍指 Offer II 110. 所有路徑|797. 所有可能路徑(多語言實現(xiàn)

    摘要:遍歷路徑,找到所有可以到達終點節(jié)點的路徑就是結(jié)果。提示中說保證輸入為有向無環(huán)圖,所以我們可以認為節(jié)點間一定有著某種排列的順序,從頭到尾怎樣可以有最多的路徑呢,那就是在保證沒有環(huán)路的情況下,所有節(jié)點都盡可能多的連接著其他節(jié)點。 ...

    wangdai 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<