Python實現堆疊和佇列詳解

pythontab發表於2017-12-22

python實現堆疊

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

我們可以設定一個類,用列表來存放棧中元素的資訊,利用列表的append()和pop()方法可以實現棧的出棧pop和入棧push的操作,list.append(obj)意思是向列表新增一個物件obj,list.pop(index=-1)意思是刪除指定位置的物件,預設是最後一個物件,也就是說list.pop(),是刪除列表中下標最大的元素。可先將Stack類寫入檔案stack.py,在其它程式檔案中使用from stack import Stack,然後就可以使用堆疊了。

stack.py的程式:

程式碼如下:

class Stack():  
    def __init__(self,size):  
        self.size=size
        self.stack=[] 
        self.top=-1
    def push(self,ele):  #入棧之前檢查棧是否已滿  
        if self.isfull():  
            raise exception("out of range")
        else:  
            self.stack.append(ele) 
            self.top=self.top+1
    def pop(self):             # 出棧之前檢查棧是否為空  
        if self.isempty():  
            raise exception("stack is empty") 
        else:  
            self.top=self.top-1 
            return self.stack.pop()
      
    def isfull(self):  
        return self.top+1==self.size
    def isempty(self):  
        return self.top==-1


再寫一個程式檔案,stacktest.py 使用棧,內容如下:

程式碼如下:

#!/usr/bin/python
from stack import Stack
s=Stack(20)
for i in range(3):  
    s.push(i)
s.pop()
print s.isempty()

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.isfull():  
            raise exception("queue is full");
        else:  
            self.queue.append(ele)
            self.rear=self.rear+1
    def dequeue(self):      #出隊操作  
        if self.isempty():  
            raise exception("queue is empty")
        else:  
            self.front=self.front+1
            return self.queue[self.front]
    def isfull(self):  
        return self.rear-self.front+1==self.size
    def isempty(self):  
        return self.front==self.rear
      
q=Queue(10);  
for i in range(3):  
    q.enqueue(i)
print q.dequeue()
print q.isempty()


相關文章