棧(stack)是乙個資料集合,可以理解為只能在一端進行插入或刪除操作的列表
棧的特點:後進先出lifo(last-in,first-out)
棧的概念:棧頂,棧底
基本操作:
class stack:def __init__(self):
self.stack =
def push(self, element):
def pop(self):
return self.stack.pop()
@property
def is_empty(self):
return len(self.stack) == 0
def get_top(self):
if not self.is_empty:
return self.stack[-1]
return none
括號匹配問題:給定乙個字串,其中包括小括號,中括號,大括號,驗證括號是否匹配
class stack:def __init__(self):
self.stack =
def push(self, element):
def pop(self):
return self.stack.pop()
@property
def is_empty(self):
return len(self.stack) == 0
def get_top(self):
if not self.is_empty:
return self.stack[-1]
return none
def brace_match(s):
match = ':'
stack = stack()
for ch in s:
if ch in match.values():
stack.push(ch)
elif ch in match.keys():
if stack.is_empty: #當棧為空,多了個右括號
return false
elif match[ch] != stack.get_top(): #右括號和棧頂不匹配
return false
else:
stack.pop()
if not stack.is_empty: #最後棧不為空,說明 有括號沒匹配上
return false
return true
s = "[()({})]]"
ret = brace_match(s)
print(ret)
利用棧實現深度優先走迷宮
maze = [[1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
[1, 0, 0, 1, 0, 0, 0, 1, 0, 1],
[1, 0, 0, 1, 0, 0, 0, 1, 0, 1],
[1, 0, 0, 0, 0, 1, 1, 0, 0, 1],
[1, 0, 1, 1, 1, 0, 0, 0, 0, 1],
[1, 0, 0, 0, 1, 0, 0, 0, 0, 1],
[1, 0, 1, 0, 0, 0, 1, 0, 0, 1],
[1, 0, 1, 1, 1, 0, 1, 1, 0, 1],
[1, 1, 0, 0, 0, 0, 0, 0, 0, 1],
[1, 1, 1, 1, 1, 1, 1, 1, 1, 1]
]dirs = [
lambda x,y: (x+1,y),
lambda x,y: (x-1,y),
lambda x,y: (x,y-1),
lambda x,y: (x,y+1)
]def maze_path(x1,y1,x2,y2):
stack =
while(len(stack)>0):
curnode = stack[-1] # 當前的節點
if curnode[0] == x2 and curnode[1] == y2:
# 走到終點了
for p in stack:
print(p)
return true
# x,y 四個方向 x-1,y; x+1,y; x,y-1; x,y+1
for dir in dirs:
nextnode = dir(curnode[0], curnode[1])
# 如果下乙個節點能走
if maze[nextnode[0]][nextnode[1]] == 0:
maze[nextnode[0]][nextnode[1]] = 2 # 2表示為已經走過
break
else:
# maze[nextnode[0]][nextnode[1]] = 2
stack.pop()
else:
print("沒有路")
return false
maze_path(1,1,8,8)
資料結構 棧 棧
可以把棧想像成乙個桶 進棧 就是把和桶口一樣大的燒餅往桶裡面扔 出棧 就是把燒餅拿出來 特點 先進後出。先扔進去的燒餅最後才能拿出來,最後扔進去的燒餅,第乙個拿出來 剛開始top 1 top 1 然後把進棧的元素賦值給data top 入棧操作 void push stack s,int x els...
資料結構 棧
例子 棧是一種被限制在只能在表的一端進行插入和刪除運算的線性表。區域性變數是用棧來儲存的 可以進行插入和刪除的一端稱為 棧頂 top 另一端稱為 棧底 bottom 當表中沒有元素時 表長為0的棧 稱為 空棧。棧的修改是按 後進先出的原則進行,因此棧被稱為後進先出 last in first out...
資料結構 棧
1.棧stack 是限定僅在表尾進行刪除和插入操作的線性表。允許插入刪除的一端叫做棧頂top,另外一端叫做棧底bottom。棧又稱為後進先出 lifo 的線性表。即表尾是指棧頂。2.順序棧 定義 top指向可存入元素的位置。typedef struct stacktypestacktype 插入 進...