棧(stack)資料結構只允許在一端進行操作,可以在一端(棧頂)進行出棧和入棧,而在另一端(棧底)不能進行操作,並且後進先出。當順序表和煉表只能在一端進行操作(頭或尾)時,順序表和煉表會變成棧。
棧可以用順序表實現也可以用鍊錶實現。
棧與順序表的區別:
棧資料結構描述的是操作,順序表和煉表描述的是資料如何存放。
使用列表入棧和出棧為什麼在尾部?在頭部的話時間複雜度為o(n),在尾部的話時間複雜度為o(1)。
使用單鏈表進行出棧和入棧操作需要在頭部進行,因為在尾部的話時間複雜度將變為o(n)。
def size(self):
#返回棧元素個數
return len(self.__list)
if __name__ == '__main__':
#當函式沒有返回值的時候預設返回none
s = stack()
s.push(1)
s.push(2)
s.push(3)
print(s.pop())
print(s.pop())
print(s.pop())
有效括號字串需滿足:左括號必須用相同型別的右括號閉合。
左括號必須以正確的順序閉合。
注意空字串可被認為是有效字串。
def balanced_parentheses(parentheses):
stack = stack(len(parentheses))
for parenthesis in parentheses:
if parenthesis == "(":
stack.push(parenthesis)
elif parenthesis == ")":
if stack.is_empty():
return false
stack.pop()
return stack.is_empty()
if __name__ == '__main__':
# s = stack(2)
# s.push(1)
# s.push(2)
# up_data=s.peek()
# print(up_data)
# print(s.is_empty())
# print(s.size())
examples = ["((()))","((())","(()))"]
for example in examples:
print(example + ":" + str(balanced_parentheses(example)))
棧,有效的括號(Python實現)
給定乙個只包括 的字串,判斷字串是否有效。將字串從前向後 從後向前也可 依次取出,若取出的字元與棧頂元素可以組成有效的括號,則彈出棧頂元素,否則將該字元壓入棧頂。字元全部取出後若棧為空,則字串有效,反之無效。class solution object defisvalid self,s type s...
棧和佇列 用棧實現括號匹配
一 棧匹配 思路 借助棧來實現括號的匹配,如果碰到的是三種左括號的話,將左括號進行入棧,以為需要匹配到括號肯定都是右括號於左括號進行匹配的,所以遇到左括號直接入棧就可以了。如果遇到右括號,需要進行匹配,如果目前棧中為空的話,直接返回false,因為這個括號很明顯的多出來了。如果不為空,將棧中的乙個元...
用棧實現括號匹配 python
python資料結構與演算法分析 第二版 用python實現棧,檔名為pystack.py user bin env python coding utf 8 假設列表尾部是棧頂端o 1 class stack def init self self.items defisempty self 判棧空 ...