Python實現堆疊與佇列

weixin_33976072發表於2018-03-19

一,利用python列表實現堆疊

堆疊是一個後進先出的資料結構,其工作方式就像一堆汽車排隊進去一個死衚衕裡面,最先進去的一定是最後出來。

可以設定一個類,用列表來存放棧中元素的資訊,利用列表的append()和pop()方法可以實現棧的出棧pop和入棧push的操作,list.append(obj)意思是向列表新增一個物件obj,list.pop(index=-1)意思是刪除指定位置的物件,預設是最後一個物件,也就是說list.pop(),是刪除列表中下標最大的元素。
程式碼:


class Stack(object):
    def __init__(self,size):
        self.size = size
        self.stack = []
        self.top = -1

    def push(self,x):
        if self.is_full():
            raise Exception('Stack is full')
        else:
            self.stack.append(x)
            self.top = self.top + 1

    def pop(self):
        if self.is_empty():
            raise Exception('Stack is empty')
        else:
            self.top = self.top - 1
            self.stack.pop()

    def is_full(self):
        return self.top + 1 == self.size

    def is_empty(self):
        return self.top == -1

    def show_stack(self):
        print(self.stack)


S = Stack(10)
for i in range(5):
    S.push(i)
S.show_stack()
for i in range(3):
    S.pop()
S.show_stack()

類中有個top屬性,用來指示棧的儲存情況,初始值為1,一旦插入一個元素,其值加1,利用top的值可以判定棧是空還是滿。

二,利用python列表實現佇列

佇列是一種先進先出的資料型別,它的跟蹤原理類似於在超市收銀處排隊,佇列裡的的第一個人首先接受服務,新的元素通過入隊的方式新增到佇列的末尾,而出隊就是將佇列的頭元素刪除。

我們可以設定一個類,用列表來存放棧中元素的資訊,利用列表的append()和pop()方法可以實現佇列的入隊enqueue和出隊dequeue的操作,上面棧一個元素每次出去是列表的最後一個,直接用list.pop()出棧,而出佇列每次是第一個,所以要用list.pop(0)出佇列。

class Queue():
    def __init__(self,size):
        self.size = size
        self.front = -1
        self.rear = -1
        self.queue = []

    def enqueue(self,ele):
        if self.is_full():
            raise Exception('Queue is full')
        else:
            self.queue.append(ele)
            self.rear = self.rear + 1

    def dequeue(self):
        if self.is_empty():
            raise Exception('Queue is empty')
        else:
            self.queue.pop(0)
            self.front = self.front + 1
    def is_full(self):
        return self.rear - self.front +1 == self.size

    def is_empty(self):
        return self.front == self.rear

    def show_queue(self):
        print(self.queue)


q = Queue(10)
for i in range(5):
    q.enqueue(i)
q.show_queue()


for i in range(3):
    q.dequeue()
q.show_queue()
print(q.is_empty())

相關文章