數據結構與算法:棧(Stack)的實現

棧在程序設計當中是一個十分常見的數據結構,它就至關於一個瓶子,能夠往裏面裝入各類元素,最早裝進這個瓶子裏的元素,要把後裝進這個瓶子裏的所有元素拿出來完以後纔可以把他給拿出來。假設這個瓶子在桌上平放,左邊是瓶底,右邊是瓶口,那麼咱們能夠做出下圖:
python

 

 能夠看到瓶子裏一共被我放進了5個元素,分別是1,2,3,4,5。那麼最早放進去的元素則是1,緊接着我放入了2,3,4,5.這很容易理解對吧。若是咱們想要把其中的一個元素,好比2取出來,那麼咱們須要把3,4,5都取出來纔可以拿到2。所以棧這個數據結構遵循的是「先進後出」的原則。咱們能夠用python當中的list來表示一個棧,list列表是一個自然的棧結構,能夠很容易地表示出棧和入棧。首先咱們定義一個棧的類,再到棧裏定義各類棧的實現方法便可,好比出棧,入棧,判斷棧是否爲空,判斷棧的大小等方法,程序以下:數據結構

class Stack():

    def __init__(self):
        # 初始化一個空的列表
        self.__list=[]

        # 壓棧,也就是把元素從上方添加上去,可是這裏我咋感受是從下方添加進去的,順序反了?
    def push(self,item):
        self.__list.append(item)

    def pop(self):
        return self.__list.pop()# 彈出棧頂的元素,同時刪除棧頂的元素

    # 返回棧頂的元素
    def peek(self):
        return self.__list[len(self.__list)-1]# 也就是獲取列表當中的最後一個元素

    # 判斷棧是否爲空
    def is_empty(self):
        return self.__list == []

    # 計算棧的大小
    def size(self):
        return len(self.__list)


stack = Stack()
print("Is this empty? :",stack.is_empty())

stack.push(1)
stack.push(2)
stack.push(3)
stack.push(4)

print("Is this empty? :",stack.is_empty())

print(stack.pop())
print(stack.pop())
print(stack.pop())
print(stack.pop())

能夠看到最後咱們建立了一個stack對象來調用裏面的方法,並往棧裏送入了4個元素,最後使用pop方法依次彈出棧頂的元素,輸出以下:app

Is this empty? : True
Is this empty? : False
4
3
2
1

 這就是咱們的數據結構:棧。簡單吧!this

相關文章
相關標籤/搜索