python實現:棧

    棧

    棧的一個特性:先進後出(First In Last Out, FILO)。python中,可以使用列表來存儲棧的數據。通過創建一個棧類,便可以方便的對棧進行操作。主要有:

  • 進棧(push())
  • 出棧(pop())
  • 清空棧(empty())
  • 是否空棧(isEmpty())
  • 是否滿棧(isFull())
  • 設置棧大小(setSize())
  • 獲取棧頂位置(getTop())等

python實現代碼示例

# -*- coding: utf-8 -*-
"""
Created on Mon Apr  1 13:36:22 2019

@author: mu
"""

class PyStack:    # 棧類
    def __init__(self,size = 20):
        self.stack = []    # 棧列表
        self.size = size   # 棧大小
        self.top = -1      # 棧頂位置
    # 設置棧大小
    def setSize(self,size):
        self.size = size
    # 元素進棧
    def push(self,element):
        if self.isFull():   # 如果棧滿,引發異常
            raise StackException('PyStackOverflow')
        else:
            self.stack.append(element)
            self.top +=1
    # 元素出棧
    def pop(self):
        if self.isEmpty(): # 如果棧爲空,則引發異常
            raise StackException('PyStackOverflow')
        else:
            element = self.stack[-1]
            self.top -=1
            del self.stack[-1]
            # self.stack = self.stack[:-1]
            return element
    # 獲取棧頂位置
    def getTop(self):
        return self.top
    # 清空棧
    def empty(self):
        self.stack = []
        self.top = -1
    # 判斷是否爲空棧
    def isEmpty(self):
        if self.top ==-1:
            return True
        else:
            return False
    # 是否爲滿棧
    def isFull(self):
        if self.top == self.size-1:
            return True
        else:
            return False

class StackException(Exception):   # 自定義異常類
    def __init__(self,data):
        self.data = data
    def __str__(self):
        return self.data
    
'''
主函數
'''
if __name__ == '__main__':
    stack = PyStack()   # 創建棧
    for i in range(10):
        stack.push(i)  # 元素進棧
    print('棧頂位置:',stack.getTop())
    while not stack.isEmpty():
        print(stack.pop())  # 元素出棧
        
    stack.empty() #清空棧
    for i in range(21):
        stack.push(i)   # 引發異常
        
    

題外記

   棧的思想很簡單,操作相對來說也比較簡單,主要棧頂位置的時刻變化!

發佈了69 篇原創文章 · 獲贊 19 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章