今天要學習的內容雖然很基礎,但卻是許多進階算法的根基。這些資料結構在解題時非常常用,不管是操作數組、處理鏈表,還是實現棧與佇列,理解它們的概念和應用至關重要。
學習影片:
https://www.youtube.com/watch?v=-LmHUlozTqE
https://www.youtube.com/watch?v=0Kiunabmm0w
https://www.youtube.com/watch?v=JSKtJqj2pwc
講的超詳細的👍👍
array
和 linked list
在實作中的區別在 Python 中使用 stack = []
這種語法時,實際上是在創建一個 Python 的 list
,在 Python 中,list
是一種基於 動態數組(dynamic array) 的資料結構。
Python 的 list
是數組嗎?
是的,Python 中的 list
內部實現是基於 動態數組,因此它可以自動調整大小。
當使用 stack = []
,這個 stack
是使用數組實現的,可以利用它來模擬棧(Stack)的行為。list
vs array
的區別:
Array(數組) 在某些語言(例如 C 或 Java)中通常是固定大小的,當需要插入或刪除元素時,可能需要重新分配內存。
Python 的 list
是動態的,可以在尾部、頭部或中間插入和刪除元素,並且可以自動調整大小,因此不需要手動管理內存。
使用兩個 stack 模擬佇列的先進先出 (FIFO) 行為。
解題思路in_stack
用於插入元素,out_stack
用於取出元素,當需要 pop
或 peek
時將 in_stack
中元素移至 out_stack
。
class MyQueue(object):
def __init__(self):
self.in_stack = []
self.out_stack = []
def push(self, x: int) -> None:
self.in_stack.append(x)
def pop(self) -> int:
self.move_in_to_out()
return self.out_stack.pop()
def peek(self) -> int:
self.move_in_to_out()
return self.out_stack[-1]
def empty(self) -> bool:
return not self.in_stack and not self.out_stack
def move_in_to_out(self):
# 只有當 out_stack 為空時,才將 in_stack 的元素全部移到 out_stack
if not self.out_stack:
while self.in_stack:
self.out_stack.append(self.in_stack.pop())