棧(英語:stack)又稱為堆疊或堆疊,棧作為一種資料結構,它按照先進後出的原則儲存資料,先進入的資料被壓入棧底,最後的資料在棧頂,需要讀資料的時候從棧頂開始彈出資料(最後乙個資料被第乙個讀出來)。
由於堆疊資料結構只允許在一端進行操作,因而按照後進先出(lifo == last in first out)的原理運作。棧也稱為後進先出表
undo操作(撤銷)
程式呼叫的系統棧
例如:a方法呼叫b方法得到返回值,b呼叫c得到返回值,a操作走到了b方法,這個時候可以將a的**位置儲存到棧中,然後走到b方法,b操作走到了c方法,這個時候可以將b的**位置儲存到棧中。最後c執行完成,根據棧的結構開始彈出資料,一步一步再走回a方法。
判斷括號是否有效。下文會有**實現(詳細規則描述可以參考leetcode第20題)
開括號必須用同一型別的括號閉合。
開方括號必須按正確順序閉合。
例如:正確的: 等 。錯誤的:[)] [}
import測試**com.wj.queue.arrayutil;
//陣列實現棧
public
class arraystackimplements stack
public
arraystack()
@override
public
intgetsize()
@override
public
boolean
isempty()
@override
public
void
push(e o)
@override
public
e pop()
@override
public
e peek()
@override
public
string tostring()
}return
stringbuilder.tostring();}}
publicclass
stacktest
integer pop = arraystack.pop();
system.out.println("移除的內容是:" + pop);
system.out.println("移除後的arraystack: " + arraystack);
}}
//相關棧的應用**測試結果
stack: [0] top
stack: [1,0] top
stack: [2,1,0] top
stack: [3,2,1,0] top
stack: [4,3,2,1,0] top
stack: [5,4,3,2,1,0] top
stack: [6,5,4,3,2,1,0] top
stack: [7,6,5,4,3,2,1,0] top
stack: [8,7,6,5,4,3,2,1,0] top
stack: [9,8,7,6,5,4,3,2,1,0] top
移除的內容是:9移除後的arraystack: stack: [8,7,6,5,4,3,2,1,0] top
思路:
**實現:
publicclass
solution "));
}public
boolean
isvalid(string s)
else
character peek =characters.pop();
switch
(c) ':
if (!peek.equals('
continue
;
case ']':
if (!peek.equals('['))
continue
;
case ')':
if (!peek.equals('('))
continue
; }}}
return
characters.isempty();}}
//測試結果
true
//若輸入solution.isvalid("") 返回false
資料結構 棧(Stack)
只允許在一端進行插入或刪除操作的線性表。首先,棧是一種線性表,但限定這種線性表只能在某一段進行插入和刪除操作。棧頂 top 線性表允許進行插入和刪除的一端。棧底 bottom 固定的,不允許進行插入和刪除的另一端。空棧 不含任何元素。如上圖 a1為棧底元素,an為棧頂元素。由於棧只能在棧頂進行插入和...
資料結構 棧stack
棧的概念與資料結構 棧 有時稱為 後進先出棧 是乙個元素的有序集合,其中新增移除新元素總發生在同一端。這一端通常稱為 頂部 與頂部對應的端稱為 底部 棧的底部很重要,因為在棧中靠近底部的元素是儲存時間最長的。最近新增的元素是最先會被移除的。這種排序原則有時被稱為 lifo,後進先出。它基於在集合內的...
《資料結構》 棧Stack
一.棧stack 先進後出 filo 1.棧的主要功能是進行資料的儲存和計算 棧是一種容器 是具有特殊限制的鍊錶或陣列 2.棧的儲存方式 順序儲存 陣列 空間固定 所以需要預先知道所需要開闢的空間有多大 陣列難以進行擴容 所以導致可用空間是有限的 鏈式儲存 鍊錶 棧可以理解為鍊錶的頭插頭刪 這種儲存...