棧的實(shí)現(xiàn)

基于順序表的棧實(shí)現(xiàn):

package StackExercise;

public class MyStack<T> {
    // 最大尺寸
    public static final int MAXSIZE = 20;

    // 頂端
    private int top;
    // 所有的棧
    private Object[] objs;
    // 棧的最大值
    private int max;

    // 初始化
    public MyStack() {
        this(MyStack.MAXSIZE);
    }

    public MyStack(int size) {
        if (size <= 0) {
            throw new RuntimeException("初始化棧必須大于0!" + size);
        } else {
            objs = new Object[size];
            top = -1;
            max = size;
        }
    }

    // 壓入元素
    public void push(T t) {
        if (top == max - 1) {
            throw new RuntimeException("棧以滿洲赵!");
        } else {
            objs[++top] = t;
        }
    }

    // 彈出頂部元素
    public T pop() {
        if (top == -1) {
            throw new RuntimeException("棧為空唉铜!");
        } else {
            T ret = (T) objs[top];
            objs[top--] = null;
            return ret;
        }
    }

    // 是否為空
    public boolean isEmpty() {
        return top == -1;
    }

    // 是否滿
    public boolean isFull() {
        return top == max - 1;
    }

    // 查看頂部元素节值,不彈出
    public T peek() {
        if (top == -1) {
            throw new RuntimeException("棧為空鸡捐!");
        } else {
            return (T) objs[top];
        }

    }

    public void print() {
        for (int i = 0; i <= top; i++) {
            System.err.println(objs[i]);
        }
    }
}

測(cè)試代碼:

package StackExercise;

public class Main {
    public static void main(String[] args) {
        MyStack<Integer> t = new MyStack<Integer>();
        for (int i = 0; i < 10; i++) {
            t.push(i);
        }
        t.print();
        for (int i = 0; i < 3; i++) {
            t.pop();
        }
        t.print();
    }
}

基于順序表的鏈表實(shí)現(xiàn):

package StackExercise;

public class LinkedStack<T> {
    // 最大尺寸
    public static final int MAXSIZE = 20;
    // 所有的棧
    public LinkedStackData<T> head;
    // 棧的頂端
    public int top;
    // 棧的最大值
    public int max;

    // 初始化
    public LinkedStack() {
        this(LinkedStack.MAXSIZE);
    }

    public LinkedStack(int size) {
        if (size <= 0) {
            throw new RuntimeException("初始化棧必須大于0鞠鲜!" + size);
        } else {
            head = new LinkedStackData<T>();
            top = -1;
            max = size;
        }
    }

    // 是否為空
    public boolean isEmpty() {
        return top == -1;
    }

    // 是否滿
    public boolean isFull() {
        return top == max - 1;
    }

    // 查看頂部元素嗅绸,不彈出
    public T peek() {
        if (top == -1) {
            throw new RuntimeException("棧為空脾猛!");
        } else {
            return (T) (findTop().data);
        }
    }

    // 彈出頂部元素
    public T pop() {
        T ret = null;
        if (top == -1) {
            throw new RuntimeException("棧為空!");
        } else {
            LinkedStackData<T> tData = head;
            while (tData.next != null) {
                if (tData.next.next == null) {
                    ret = tData.next.data;
                    tData.next = null;
                    break;
                }
                tData = tData.next;
            }
        }
        return ret;
    }

    // 壓入元素
    public void push(T t) {
        if (top == max - 1) {
            throw new RuntimeException("棧以滿朽砰!");
        } else {
            LinkedStackData<T> newData = new LinkedStackData<T>();
            newData.data = t;
            LinkedStackData<T> topData = findTop();
            topData.next = newData;
            top++;
        }
    }

    // 尋找頂部元素
    private LinkedStackData<T> findTop() {
        LinkedStackData<T> tData = head;
        while (tData.next != null) {
            tData = tData.next;
        }
        return tData;
    }

    // 打印
    public void print() {
        LinkedStackData<T> i = head;
        while (i.next != null) {
            i = i.next;
            System.err.println(i.data);
        }
        
    }
}

基礎(chǔ)數(shù)據(jù)類:

package StackExercise;

public class LinkedStackData<T> {
    // 下一個(gè)
    public LinkedStackData<T> next;
    // 當(dāng)前數(shù)據(jù)
    public T data;
}

測(cè)試代碼:

package StackExercise;

public class Main {
    public static void main(String[] args) {

        LinkedStack<Integer> t = new LinkedStack<Integer>();
        for (int i = 0; i < 10; i++) {
            t.push(i);
        }
        t.print();
        for (int i = 0; i < 3; i++) {
            t.pop();
        }
        t.print();
    }
}

以為這個(gè)會(huì)比鏈表東西會(huì)多一些尖滚,但是寫起來感覺比鏈表好像要簡(jiǎn)單,也可能是方法少,但是理解起來可能對(duì)新手有一些難度吧瞧柔。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末漆弄,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子造锅,更是在濱河造成了極大的恐慌撼唾,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,204評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件哥蔚,死亡現(xiàn)場(chǎng)離奇詭異倒谷,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)糙箍,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門渤愁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人深夯,你說我怎么就攤上這事抖格∨灯唬” “怎么了?”我有些...
    開封第一講書人閱讀 164,548評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵雹拄,是天一觀的道長(zhǎng)收奔。 經(jīng)常有香客問我,道長(zhǎng)滓玖,這世上最難降的妖魔是什么坪哄? 我笑而不...
    開封第一講書人閱讀 58,657評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮势篡,結(jié)果婚禮上翩肌,老公的妹妹穿的比我還像新娘。我一直安慰自己殊霞,他們只是感情好摧阅,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著绷蹲,像睡著了一般棒卷。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上祝钢,一...
    開封第一講書人閱讀 51,554評(píng)論 1 305
  • 那天比规,我揣著相機(jī)與錄音,去河邊找鬼拦英。 笑死蜒什,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的疤估。 我是一名探鬼主播灾常,決...
    沈念sama閱讀 40,302評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼铃拇!你這毒婦竟也來了钞瀑?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,216評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤慷荔,失蹤者是張志新(化名)和其女友劉穎雕什,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體显晶,經(jīng)...
    沈念sama閱讀 45,661評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡贷岸,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了磷雇。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片偿警。...
    茶點(diǎn)故事閱讀 39,977評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖唯笙,靈堂內(nèi)的尸體忽然破棺而出户敬,到底是詐尸還是另有隱情落剪,我是刑警寧澤,帶...
    沈念sama閱讀 35,697評(píng)論 5 347
  • 正文 年R本政府宣布尿庐,位于F島的核電站,受9級(jí)特大地震影響呢堰,放射性物質(zhì)發(fā)生泄漏抄瑟。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評(píng)論 3 330
  • 文/蒙蒙 一枉疼、第九天 我趴在偏房一處隱蔽的房頂上張望皮假。 院中可真熱鬧,春花似錦骂维、人聲如沸惹资。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽褪测。三九已至,卻和暖如春潦刃,著一層夾襖步出監(jiān)牢的瞬間侮措,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評(píng)論 1 270
  • 我被黑心中介騙來泰國(guó)打工乖杠, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留分扎,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,138評(píng)論 3 370
  • 正文 我出身青樓胧洒,卻偏偏與公主長(zhǎng)得像畏吓,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子卫漫,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容