摘要:返回棧頂元素,未出棧出棧,返回棧頂元素,同時從棧中移除該元素棧頂元素,代表空棧棧容量,默認為存放元素的數(shù)組添加元素,從棧頂數(shù)組尾部插入擴容從棧頂添加元素復制元素更新棧頂
Stack Interface
package com.nasuf.arraylist; public interface StackSequence Stack{ boolean isEmpty(); void push(T data); /** * 返回棧頂元素,未出棧 * @return */ T peek(); /** * 出棧,返回棧頂元素,同時從棧中移除該元素 * @return */ T pop(); }
package com.nasuf.arraylist; import java.io.Serializable; import java.util.EmptyStackException; public class SeqStackimplements 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 LinkedStackimplements 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
摘要:解決方案二入隊都在中進行,用于隊列,同時保證所有元素都在一個棧里,且遵循以下約束入隊不管空與否,都將中的所有元素壓入中出隊若中不為空,則直接從中彈出元素若為空,則說明隊列為空,不能出隊。 聲明:碼字不易,轉(zhuǎn)載請注明出處,歡迎文章下方討論交流。 前言:Java數(shù)據(jù)結(jié)構與算法專題會不定時更新,歡迎各位讀者監(jiān)督。本篇文章介紹一個有趣的問題:用兩個棧實現(xiàn)一個隊列。這道題來自互聯(lián)網(wǎng)公司的算法面試...
摘要:題目使用棧實現(xiàn)隊列的下列操作將一個元素放入隊列的尾部。用棧實現(xiàn)隊列,可以用兩個棧完成題解。入隊列時用存入節(jié)點,出隊列時內(nèi)節(jié)點順序出棧壓入中。這類編程語言就壓根不需要用隊列實現(xiàn)?;蛴脳崿F(xiàn)隊列這種問題,因為棧和隊列本身就必須借助實現(xiàn)。 題目: 使用棧實現(xiàn)隊列的下列操作: push(x) -- 將一個元素放入隊列的尾部。 pop() -- 從隊列首部移除元素。 peek() -- 返回隊...
概要 學完Vector了之后,接下來我們開始學習Stack。Stack很簡單,它繼承于Vector。學習方式還是和之前一樣,先對Stack有個整體認識,然后再學習它的源碼;最后再通過實例來學會使用它。 第1部分 Stack介紹 Stack簡介 Stack是棧。它的特性是:先進后出(FILO, First In Last Out)。 java工具包中的Stack是繼承于Vector(矢量隊列)的,由...
摘要:二實現(xiàn)一個棧,并實現(xiàn)下面方法添加一個新元素到棧頂。移除棧頂?shù)脑?,同時返回被移除的元素。十進制轉(zhuǎn)換為二進制請輸入正確的數(shù)值方法簡單實現(xiàn)下面這個方法,其實不太好,因為沒有怎么用到這次要練習的棧方法,哈哈。 最近公司內(nèi)部在開始做前端技術的技術分享,每周一個主題的 每周一練,以基礎知識為主,感覺挺棒的,跟著團隊的大佬們學習和復習一些知識,新人也可以多學習一些知識,也把團隊內(nèi)部學習氛圍營造起來...
摘要:劍指用兩個棧模擬隊列聲明文章均為本人技術筆記,轉(zhuǎn)載請注明出處解題思路實現(xiàn)功能用兩個棧模擬實現(xiàn)一個隊列的,和操作解題思路假設有兩個棧隊列實現(xiàn)始終用入棧實現(xiàn)隊列和實現(xiàn)由于依次出棧并壓入中,恰好保證中順序與模擬隊列順序一致,始終保證棧頂元素為模擬 劍指offer/LintCode40_用兩個棧模擬隊列 聲明 文章均為本人技術筆記,轉(zhuǎn)載請注明出處https://segmentfault.com...
摘要:遍歷路徑,找到所有可以到達終點節(jié)點的路徑就是結(jié)果。提示中說保證輸入為有向無環(huán)圖,所以我們可以認為節(jié)點間一定有著某種排列的順序,從頭到尾怎樣可以有最多的路徑呢,那就是在保證沒有環(huán)路的情況下,所有節(jié)點都盡可能多的連接著其他節(jié)點。 ...
閱讀 3844·2023-04-25 16:32
閱讀 2225·2021-09-28 09:36
閱讀 2045·2021-09-06 15:02
閱讀 684·2021-09-02 15:21
閱讀 930·2019-08-30 15:56
閱讀 3527·2019-08-30 15:45
閱讀 1720·2019-08-30 13:09
閱讀 391·2019-08-29 16:05