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