【數據結構專項】鏈表(3) —— 用單鏈表實現棧(Python)

用單鏈表實現棧

棧頂位於單鏈表的頭結點處,維護頭指針和鏈表長度;每次壓入元素則在頭結點前插入新結點,取出元素則刪除頭結點。

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) O(1)O(1)
S.is_empty() O(1)O(1)
S.push(value) O(1)O(1)
S.top() O(1)O(1)
S.pop() O(1)O(1)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章