標籤:ar sp on c 代碼 時間 ad ef r
做了些實驗,感覺 用鏈表實現隊列 比 用數組實現隊列 效能好
進出隊的每秒運算元比較
數組隊列
|
enqueue |
37,037 |
|
dequeue |
4,166,666 |
鏈表隊列
|
enqueue |
277,778 |
|
dequeue |
666,667 |
先入隊n次,再出隊n次的已耗用時間比較,單位是秒
出入隊次數 | 數組隊列已耗用時間 | 鏈表隊列已耗用時間
|
1,000 |
0.01 |
0.01 |
|
10,000 |
0.04 |
0.04 |
|
100,000 |
2.7 |
0.4 |
|
1,000,000 |
|
4 |
最後一組,數組隊列的半天沒運行出來
下面是代碼
class ArrayQueue:
def __init__(self):
self.items = []
def isEmpty(self):
return self.items == []
def enqueue(self, item):
self.items.insert(0,item)
def dequeue(self):
return self.items.pop()
def size(self):
return len(self.items)
class Node:
def __init__(self,initdata):
self.data = initdata
self.next = None
self.prev = None
class LinkedListQueue:
def __init__(self):
self.head = None
self.rear = None
self.size = 0
def isEmpty(self):
return self.size == 0
def size(self):
return self.size
def enqueue(self,item):
self.size += 1
pre = self.head
self.head = Node(item)
self.head.next = pre
if pre != None: pre.prev = self.head
else: self.rear = self.head
def dequeue(self):
if self.size == 0: return None
self.size -= 1
rmdata = self.rear.data
if self.rear.prev != None:
self.rear = self.rear.prev
return rmdata
數組隊列 與 鏈表隊列