日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

python实现可扩容队列

發(fā)布時(shí)間:2024/7/23 python 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python实现可扩容队列 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
#coding:utf-8 """ fzh created on 2019/10/15 構(gòu)建一個(gè)隊(duì)列 """ import datetimeclass LoopQueue(object):def __init__(self, n=10):self.arr = [None] * (n+1) # 由于特意浪費(fèi)了一個(gè)空間,所以arr的實(shí)際大小應(yīng)該是用戶傳入的容量+1self.front = 0self.tail = 0self.size = 0def __str__(self):return str(self.arr)def __len__(self):return len(self.arr)def __iter__(self):return iter(self.arr)def get_size(self):# 獲取隊(duì)列元素個(gè)數(shù)return self.sizedef get_capaticty(self):# 獲取隊(duì)列容積(實(shí)際可存儲(chǔ)元素個(gè)數(shù))return self.__len__() - 1def is_full(self):# 判斷隊(duì)列是否為滿return (self.tail+1) % len(self.arr) == self.frontdef is_empty(self):# 判斷隊(duì)列是否為空return self.size == 0def get_front(self):# 獲取隊(duì)首return self.arr[self.front]def enqueue(self, e):# 入隊(duì)if self.is_full():self.resize(self.get_capaticty() * 2) # 如果隊(duì)列滿,以當(dāng)前隊(duì)列容積的2倍進(jìn)行擴(kuò)容self.arr[self.tail] = eself.tail = (self.tail+1) % len(self.arr)self.size += 1def dequeue(self):# 出隊(duì)if self.is_empty():raise Exception("Cannot dequeue from en empty queue")result = self.arr[self.front]self.arr[self.front] = Noneself.front = (self.front+1) % len(self.arr)self.size -= 1# 如果元素個(gè)數(shù)少于容積的1/4并且元素個(gè)數(shù)if self.size < self.get_capaticty() // 4 and self.get_capaticty() > 1:self.resize(self.get_capaticty() // 2)return resultdef 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_arrself.front = 0self.tail = self.sizedef 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---------測(cè)試enqueue----------')print('Loop_Queue: size = {0} , capacity = {1}'.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('=====隊(duì)列輸出結(jié)果=====')#算法處理完,更新數(shù)據(jù),同時(shí)出隊(duì)for i in range(loop_queue.get_size()):deq_res = loop_queue.dequeue()print('deq_res:', deq_res)#加入算法處理過(guò)程last_time = datetime.datetime.now() - start_timeprint('---------測(cè)試dequeue----------')print('Loop_Queue: size = {0} , capacity = {1}'.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())# #這個(gè)是去異步輪詢查找數(shù)據(jù)庫(kù),如果沒(méi)有處理的,加入隊(duì)列# for i, img_list_path in enumerate(imgs_list_path):# loop_queue.enqueue(img_list_path)# print(loop_queue) if __name__ == '__main__':imgs_list_path = ['1.jpg', '2.jpg', '3.jpg', '4.jpg']loop_queue = LoopQueue()main(loop_queue,imgs_list_path)

總結(jié)

以上是生活随笔為你收集整理的python实现可扩容队列的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。