一、利用python列表實現堆棧和隊列
堆棧:
堆棧是一個后進先出的數據結構,其工作方式就像生活中常見到的直梯,先進去的人肯定是最后出。
我們可以設置一個類,用列表來存放棧中的元素的信息,利用列表的append()和pop()方法可以實現棧的出棧pop和入棧push的操作,list.append(obj)意思是向列表添加一個對象obj,list.pop(index=-1)意思是刪除指定位置的對象,默認是最后一個對象,也就是說list.pop(),是刪除列表中下標最大的元素。
# 后進先出 class Stack(): def __init__(self,size): self.size=size self.stack=[] self.top=-1 def push(self,x): # 入棧之前檢查棧是否已滿 if self.isfull(): raise exception("stack is full") else: self.stack.append(x) self.top=self.top+1 def pop(self): # 出棧之前檢查棧是否為空 if self.isempty(): raise exception("stack is empty") else: self.top=self.top-1 self.stack.pop() def isfull(self): return self.top+1 == self.size def isempty(self): return self.top == '-1' def showStack(self): print(self.stack) s=Stack(10) for i in range(6): s.push(i) s.showStack() for i in range(3): s.pop() s.showStack() """ 類中有top屬性,用來指示棧的存儲情況,初始值為1,一旦插入一個元素,其值加1,利用top的值樂意判定棧是空還是滿。 執行時先將0,1,2,3,4,5依次入棧,然后刪除棧頂的前三個元素 """
隊列:
隊列是一種先進先出的數據類型,它的跟蹤原理類似於在超市收銀處排隊,隊列里的的第一個人首先接受服務, 新的元素通過入隊的方式添加到隊列的末尾,而出隊就是將隊列的頭元素刪除。 我們可以設置一個類,用列表來存放棧中元素的信息,利用列表的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.queue.pop(0) self.front=self.front+1 def isfull(self): return self.rear-self.front+1 == self.size def isempty(self): return self.front == self.rear def showQueue(self): print(self.queue) q=Queue(10) for i in range(6): q.enqueue(i) q.showQueue() for i in range(3): q.dequeue() q.showQueue() print(q.isempty()) """ 類中設置兩個屬性分別為front和rear來模擬隊列的頭尾指針,通過它們值的關系可以判定隊列是空還是滿 """