python實現可擴容佇列

2021-09-28 17:01:12 字數 3349 閱讀 5114

#coding:utf-8

"""fzh created on 2019/10/15

構建乙個佇列

"""import datetime

class loopqueue(object):

def __init__(self, n=10):

self.arr = [none] * (n+1) # 由於特意浪費了乙個空間,所以arr的實際大小應該是使用者傳入的容量+1

self.front = 0

self.tail = 0

self.size = 0

def __str__(self):

return str(self.arr)

def __len__(self):

return len(self.arr)

def __iter__(self):

return iter(self.arr)

def get_size(self):

# 獲取佇列元素個數

return self.size

def get_capaticty(self):

# 獲取佇列容積(實際可儲存元素個數)

return self.__len__() - 1

def is_full(self):

# 判斷佇列是否為滿

return (self.tail+1) % len(self.arr) == self.front

def is_empty(self):

# 判斷佇列是否為空

return self.size == 0

def get_front(self):

# 獲取隊首

return self.arr[self.front]

def enqueue(self, e):

# 入隊

if self.is_full():

self.resize(self.get_capaticty() * 2) # 如果佇列滿,以當前佇列容積的2倍進行擴容

self.arr[self.tail] = e

self.tail = (self.tail+1) % len(self.arr)

self.size += 1

def dequeue(self):

# 出隊

if self.is_empty():

raise exception("cannot dequeue from en empty queue")

result = self.arr[self.front]

self.arr[self.front] = none

self.front = (self.front+1) % len(self.arr)

self.size -= 1

# 如果元素個數少於容積的1/4並且元素個數

if self.size < self.get_capaticty() // 4 and self.get_capaticty() > 1:

self.resize(self.get_capaticty() // 2)

return result

def resize(self, new_capacity):

new_arr = [none] * (new_capacity+1)

for i in range(self.size):

new_arr[i] = self.arr[(i+self.front) % len(self.arr)]

self.arr = new_arr

self.front = 0

self.tail = self.size

def main(loop_queue,imgs_list_path):

start_time = datetime.datetime.now()

for i, img_list_path in enumerate(imgs_list_path):

loop_queue.enqueue(img_list_path)

print('\n---------測試enqueue----------')

print('loop_queue: size = , capacity = '.format(loop_queue.get_size(), loop_queue.get_capaticty()))

print('loop_queue:', loop_queue)

# print('is_empty:', loop_queue.is_empty())

# print('is_full:', loop_queue.is_full())

print('get_front:', loop_queue.get_front())

print('*****佇列輸出結果*****')

#演算法處理完,更新資料,同時出隊

for i in range(loop_queue.get_size()):

deq_res = loop_queue.dequeue()

print('deq_res:', deq_res)

#加入演算法處理過程

last_time = datetime.datetime.now() - start_time

print('---------測試dequeue----------')

print('loop_queue: size = , capacity = '.format(loop_queue.get_size(), loop_queue.get_capaticty()),

loop_queue)

# print('is_empty:', loop_queue.is_empty())

# print('is_full:', loop_queue.is_full())

print('get_front:', loop_queue.get_front())

# #這個是去非同步輪詢查詢資料庫,如果沒有處理的,加入佇列

翻譯 問HS 設計和實現可擴容服務?

翻譯自 ask hs design and implementation of scalable services?我們通過網路編寫 來部署 分布。每15秒,甚至可以是每5秒傳送一次資料。致力於服務 系統工作為了讓所有 能夠通過臨界有效載荷推送資料 元組。高達5 的下降率是可以接受的。最終的資料將會...

python 清空佇列 python實現 佇列

佇列 佇列的乙個特性是 先進先出 first in first out,fifo python中,同樣可以使用列表來儲存佇列的資料。通過建立乙個佇列類,便可以方便的對佇列進行操作。主要有 入隊 in 出隊 out 清空佇列 empty 設定佇列大小 setsize 獲取隊尾位置 getend 等 p...

佇列(python實現)

adt queue queue self 建立空佇列 is empty self 判斷佇列是否為空 enqueue self,elem 入隊 dequeue self 出隊 peek self 檢視最早入隊的元素,不刪除class queueunderflow valueerror 空佇列訪問 pa...