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()