包含min函數(shù)的棧(Python)

# coding=utf8
'''
題目:定義棧的數(shù)據(jù)結(jié)構(gòu),請?jiān)谠擃愋椭袑?shí)現(xiàn)一個能夠得到棧的最小元素的min函數(shù)。在該棧中,調(diào)用
min、push及pop的時(shí)間復(fù)雜度都是O(1)。
'''
 
class Stack():
    def __init__(self):
        self.main_stack = []
        # 輔助棧,每次次最小的元素壓入輔助棧
        self.assist_stack = []
        # 記錄棧中的最小元素
        self._min = None
    
    def min(self):
        return self._min
    
    def push(self, data):
        self.main_stack.append(data)
        if self._min is None:
            self._min = data
        else:
            if data < self._min:
                self._min = data
        # 將最小的元素壓入輔助棧
        self.assist_stack.append(self._min)
    
    def pop(self):
        if len(self.main_stack) == 0:
            raise Exception('no data')
        elif len(self.main_stack) == 1:
            self.assist_stack.pop()
            self._min = None
            return self.main_stack.pop()
        else:
            self.assist_stack.pop()
            self._min = self.assist_stack[-1]
            return self.main_stack.pop()
    
if __name__ == '__main__':
    s = Stack()
    s.push(3)
    s.push(4)
    s.push(2)
    s.push(1)
    print s.min()
    s.pop()
    s.pop()
    print s.min()
    s.pop()
    print s.min()
    s.pop()
    print s.min()
    s.pop()
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容