棧的實現

棧是一個LIFO數據結構,也就是後進去的元素先出來,棧中的元素沒有任何的
相互關聯,棧可以實現的操作也很簡單,除了建立空棧,判斷空棧外,只有對
棧頂壓入元素,彈出元素,查看棧頂元素。

我們通過順序表和鏈接表依次來實現一個棧的類:
通過順序表實現:

class StackOverFlow(ValueError):
    pass

class Stack:
    maxElem = 9
    # 指定棧最大能存儲的元素數量
    # 注意一點是我們在這裏利用python數組實現的棧結構,所以棧
    # 是不會被填滿的,在這裏添加一個maxElem類屬性只是假設有一個
    # 棧有一個最大值
    def __init__(self):
        self._elem = []
        
    def is_empty(self):
        if not self._elem:
            return True
        return False
    
    def push(self, elem):
        if len(self._elem) == Stack.maxElem:
            print("棧已滿,無法加入")
            raise StackOverFlow
        self._elem.append(elem)
        
    def pop(self):
        if len(self._elem) == 0:
            raise StackOverFlow("棧爲空,幹嘛刪")
        return self._elem.pop()
    
    def get_top(self):
        if len(self._elem) == 0:
            raise StackOverFlow("棧爲空,無法拿")
        return self._elem[-1]

通過鏈接表實現:

class StackOverFlow(ValueError):
    pass

class Node:
    def __init__(self, elem=None, lnext=None):
        self.elem = elem
        self.next = lnext

class Stack:
    def __init__(self):
        self._head = None

    def is_empty(self):
        return self._head == None

    def push(self, elem):
        new_node = Node(elem, self._head)
        self._head = new_node

    def pop(self):
        if self._head == None:
            raise StackOverFlow("棧爲空")
        elem = self._head.elem
        self._head = self._head.next
        return elem

    def top(self):
        if self._head == None:
            raise StackOverFlow("棧爲空")
        return self._head.elem
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章