用單鏈表實現棧
棧頂位於單鏈表的頭結點處,維護頭指針和鏈表長度;每次壓入元素則在頭結點前插入新結點,取出元素則刪除頭結點。
class LinkedStack:
"""單鏈表實現的棧"""
class _Node:
""""""
__slots__ = "value", "next" # 因爲會創建很多個結點對象,因此使用__slots__來減少內存佔用
def __init__(self, value, next):
self.value = value
self.next = next
def __init__(self):
self._head = None # 頭指針
self._size = 0 # 棧中元素的數量
def __len__(self):
"""返回棧中元素的數量"""
return self._size
def is_empty(self):
"""返回棧是否爲空"""
return self._size == 0
def push(self, value):
"""向棧中壓入元素"""
self._head = self._Node(value, self._head) # 構造鏈表對象
self._size += 1
def top(self):
"""查詢棧頂元素"""
if self.is_empty():
raise ValueError("Stack is Empty")
return self._head.value
def pop(self):
"""取出棧頂元素"""
if self.is_empty():
raise ValueError("Stack is Empty")
ans = self._head.value
self._head = self._head.next
self._size -= 1
return ans
操作的時間複雜度:
操作 | 時間複雜度 |
---|---|
len(S) | |
S.is_empty() | |
S.push(value) | |
S.top() | |
S.pop() |