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

資訊專欄INFORMATION COLUMN

Java編程思想-Stack的三種實(shí)現(xiàn)(數(shù)組,容器,鏈表)

zhiwei / 1002人閱讀

摘要:要實(shí)現(xiàn),至少應(yīng)該包括出棧操作,彈出棧頂元素。入棧操作查看棧頂元素棧為空另外,實(shí)現(xiàn)一個(gè)棧,還應(yīng)該考慮到幾個(gè)問題棧的初始大小以及棧滿以后如何新增??臻g對(duì)棧進(jìn)行更新時(shí)需要進(jìn)行同步有三種實(shí)現(xiàn)的方式,數(shù)組,容器,以及鏈表的方法。

雖是讀書筆記,但是如轉(zhuǎn)載請(qǐng)注明出處http://segmentfault.com/blog/exploring/
..拒絕伸手復(fù)制黨
想更一進(jìn)步的支持我,請(qǐng)掃描下方的二維碼,你懂的~

Stack

棧(Stack)是限制僅在表的一端進(jìn)行插入和刪除運(yùn)算的線性表。
java 沒有棧這樣的數(shù)據(jù)結(jié)構(gòu),如果想利用先進(jìn)后出(FILO)這樣的數(shù)據(jù)結(jié)構(gòu),就必須自己實(shí)現(xiàn)。

要實(shí)現(xiàn)Stack,至少應(yīng)該包括:
1. pop() 出棧操作,彈出棧頂元素。
2. push(E e) 入棧操作
3. peek() 查看棧頂元素
4. isEmpty() 棧為空

另外,實(shí)現(xiàn)一個(gè)棧,還應(yīng)該考慮到幾個(gè)問題:
1. 棧的初始大小以及棧滿以后如何新增棧空間
2. 對(duì)棧進(jìn)行更新時(shí)需要進(jìn)行同步

有三種實(shí)現(xiàn)的方式,數(shù)組,容器,以及鏈表的方法。

數(shù)據(jù):

javapackage gsm;
import java.util.*;

public class StackArray{
    private int[] array;//用數(shù)組實(shí)現(xiàn)
    private int top; //棧頂指針
    private final static int size = 100;
    public StackArray(){
        array = new int[size];
        top = -1; //??盏臅r(shí)候 
    }
    //壓棧
    public void push(int element){
        if(top == size-1){
            throw new StackOverflowError();
        }
        else 
            array[++top] = element;
    }
    //彈棧
    public int pop(){
        if(top == -1){
            throw new EmptyStackException();
        }
        return array[top--];
    }
    //判斷是否為空
    public boolean isEmpty(){
        return top == -1;
    }
    //返回棧頂元素
    public Integer peek(){
        if(top == -1){
            throw new EmptyStackException();
        }
        return array[top];
    }
}

容器

javapackage gsm;

public interface Stack {
    public T pop();
    public void push(T element);
    public boolean isEmpty();
    public T peek();
}

package gsm;
import java.util.*;

public class StackList implements Stack {
    private List list ; //用容器實(shí)現(xiàn)
    StackList(){
        list = new ArrayList();
    }
    //彈棧
    public T pop(){
        if(this.isEmpty() == true){
            throw new EmptyStackException();
        }

        return list.remove(list.size()-1);
    }
    //壓棧
    public void push(T element){
        list.add(element);
    }
    //判斷是否為空
    public boolean isEmpty(){
        return list.size() == 0;
    }
    //返回棧頂元素
    public T peek(){
        if(this.isEmpty() == true){
            throw new EmptyStackException();
        }
        return list.get(list.size()-1);
    }
}

鏈表

javapackage gsm;

import java.util.EmptyStackException;

public class LinkedStack implements Stack{
    //不用容器或者數(shù)組等數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)節(jié)點(diǎn)
    //Node定義一個(gè)節(jié)點(diǎn)類
    private static class Node{
        private U item; //存儲(chǔ)的data
        private Node next; //類似指針
        Node(){
            this.item = null;
            this.next = null;
        }
        Node(U item, Node next){
            this.item = item;
            this.next = next;
        }
        boolean end(){
            return item == null && next == null;
        }
    } 

    private Node top ; //棧頂指針
    LinkedStack(){
        top = new Node();
    }


    //彈棧
    public T pop(){
        if(this.isEmpty() == true){
            throw new EmptyStackException();
        }
        T result = top.item;
        if(!top.end())
        {
            top = top.next;
        }
        return result;
    }
    //壓棧
    public void push(T element){
        top = new Node(element, top);
    }
    //判斷是否為空
    public boolean isEmpty(){
        return  top.end();
    }
    //返回棧頂元素
    public T peek(){
        if(this.isEmpty() == true){
            throw new EmptyStackException();
        }
        T result = top.item;
        return result;
    }   
}

可以發(fā)現(xiàn)容器果然是java的一個(gè)利器,方便高效。

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

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

相關(guān)文章

  • 數(shù)據(jù)結(jié)構(gòu)分析及其實(shí)現(xiàn)(Stack、Queue、Tree、LinkedList)

    摘要:常見數(shù)據(jù)結(jié)構(gòu)分析及實(shí)現(xiàn)說明本文中的代碼是參考編程思想某培訓(xùn)機(jī)構(gòu)。同時(shí)還要分析這些數(shù)據(jù)結(jié)構(gòu)在時(shí)間和空間上的開銷。這種專門研究應(yīng)用程序中的數(shù)據(jù)之間的邏輯關(guān)系,存儲(chǔ)方式及其操作的學(xué)問就是數(shù)據(jù)結(jié)構(gòu)。 常見數(shù)據(jù)結(jié)構(gòu)分析及實(shí)現(xiàn) 說明 本文中的代碼是參考《Java編程思想》、某培訓(xùn)機(jī)構(gòu)。 文中的代碼放Github了,有興趣的可以看看,點(diǎn)歌star鼓勵(lì)下我。 代碼在Sublime中敲的,坑爹的GBK...

    Richard_Gao 評(píng)論0 收藏0
  • Java編程思想》--持有對(duì)象

    Java是面向?qū)ο蟮恼Z言,對(duì)象時(shí)Java不可或缺的一個(gè)元素,基本數(shù)據(jù)類型有數(shù)組用來存儲(chǔ),那么對(duì)象元素有什么存儲(chǔ)呢,這就是集合,集合是Java非常重要的一塊知識(shí),Java編程思想中的持有對(duì)象簡述了集合的相關(guān)知識(shí),下面簡述集合的相關(guān)功能: showImg(/img/bVC153); 集合類我們通常稱為容器 其實(shí)容器只有四種:Map、List、Set和Queue 常用的容器有ArrayList、Lin...

    dinfer 評(píng)論0 收藏0
  • 數(shù)據(jù)結(jié)構(gòu)第一講

    摘要:為什么要學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)語言是相通的人們常說,編程語言是相通的,掌握一門,其他語言很容易就能掌握。其實(shí),真正想通的不是語言,而是數(shù)據(jù)結(jié)構(gòu)與算法。 為什么要學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu) 1.語言是相通的 人們常說,編程語言是相通的,掌握一門,其他語言很容易就能掌握。個(gè)人認(rèn)為這是一個(gè)似是而非的觀點(diǎn),每門編程語言都離不開變量,數(shù)組,循環(huán),條件判斷這些概念,這似乎能支持上面的觀點(diǎn),但是每門編程語言都有自己的使用范...

    k00baa 評(píng)論0 收藏0
  • 數(shù)據(jù)結(jié)構(gòu)第一講

    摘要:為什么要學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)語言是相通的人們常說,編程語言是相通的,掌握一門,其他語言很容易就能掌握。其實(shí),真正想通的不是語言,而是數(shù)據(jù)結(jié)構(gòu)與算法。 為什么要學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu) 1.語言是相通的 人們常說,編程語言是相通的,掌握一門,其他語言很容易就能掌握。個(gè)人認(rèn)為這是一個(gè)似是而非的觀點(diǎn),每門編程語言都離不開變量,數(shù)組,循環(huán),條件判斷這些概念,這似乎能支持上面的觀點(diǎn),但是每門編程語言都有自己的使用范...

    wemall 評(píng)論0 收藏0
  • 棧和隊(duì)列 - Algorithms, Part I, week 2 STACKS AND QUEUE

    摘要:在改進(jìn)前使用數(shù)組的一個(gè)缺點(diǎn)是必須聲明數(shù)組的大小,所以棧有確定的容量。待解決的問題建立一個(gè)能夠增長或者縮短到任意大小的棧。下邊的圖是觀察時(shí)間開銷的另一種方式,表示了入棧操作需要訪問數(shù)組的次數(shù)。 前言 上一篇:算法分析下一篇:基本排序 本篇內(nèi)容主要是棧,隊(duì)列 (和包)的基本數(shù)據(jù)類型和數(shù)據(jù)結(jié)構(gòu)文章里頭所有的對(duì)數(shù)函數(shù)都是以 2 為底關(guān)于性能分析,可能還是需要一些數(shù)學(xué)知識(shí),有時(shí)間可以回一下在很多...

    Stardustsky 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

zhiwei

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<