隊列:允許插入的一端爲隊頭front,允許刪除的一端爲隊尾rear,先進先出的原則。
順序隊列:sequential queue
隊尾指針指示隊尾元素在一維數組中的當前位置,隊頭指針指示隊頭元素在一維數組中當前位置的前一個位置,空隊列self.front= self.rear = 0
鏈式隊列:linked queue 不需要指定長度,一般不會產生隊滿
一個同時帶有頭指針和尾指針的單鏈表,頭指針指向頭結點,尾指針指向尾結點
class SequenceSqueue(object):
def __init__(self,maxsize):
self.maxsize = maxsize
self.data = [None for _ in range(maxsize)]
#self.data = list(None for x in range(maxsize))
self.front = 0
self.rear = 0
def isEmpty(self):
if self.front == self.rear:
print True
else:
print False
def getLength(self):
print self.rear - self.front
def En_Queue(self,x):
if self.rear < self.maxsize:
self.rear = self.rear + 1
self.data[self.rear] = x
else:
print 'queue is full!'
def init_queue(self):
element = input('please input a element,# for end:')
while element != '#':
self.En_Queue(element)
element = input('please input a element,# for end:')
def show_queue(self):
if self.front == self.rear:
print 'queue is empty!'
else:
index = self.front + 1
store = []
while index < self.rear + 1:
store.append(self.data[index])
index = index + 1
print store
def Del_Queue(self):
if self.front == self.rear:
print 'queue is empty!'
else:
self.front = self.front + 1
print self.data[self.front]
def Queue_Head(self):
if self.front == self.rear:
print 'queue is empty!'
else:
print self.data[self.front + 1]
def clear_queue(self):
self.front = self.rear
print 'clear over!'
if __name__ == '__main__':
q= SequenceSqueue(100)
q.isEmpty()
q.init_queue()
q.show_queue()
q.Queue_Head()
q.En_Queue('new')
q.Del_Queue()
q.show_queue()
q.getLength()
輸出:
True
please input a element,# for end:1
please input a element,# for end:2
please input a element,# for end:3
please input a element,# for end:’#’
[1, 2, 3]
1
1
[2, 3, ‘new’]
3
class Node(object):
#must give a param data = None, En_Queue will use
def __init__(self,data = None):
self.data = data
self.next = None
class LinkedQueue(object):
def __init__(self):
self.front = Node()
self.rear = Node()
self.length = 0
def isEmpty(self):
if self.length == 0:
print True
else:
print False
def getLength(self):
print self.length
def En_Queue(self,item):
temp = Node(item)
#if use self.isEmpty.everyrtime init will print True or False
if self.length == 0:
self.front = temp
self.rear = temp
else:
self.rear.next = temp
self.rear = temp
self.length = self.length + 1
def init_queue(self):
data = input('please input item, # for end:')
while data != '#':
self.En_Queue(data)
#self.length = self.length + 1
data = input('please input item, # for end:')
def Del_Queue(self):
if self.length == 0 :
print 'queue is null!'
else:
temp = self.front.data
self.front = self.front.next
self.length = self.length - 1
print temp
def Queue_Head(self):
if self.length == 0 :
print 'queue is null!'
else:
print self.front.data
def show_queue(self):
if self.length == 0 :
print 'queue is null!'
else:
store = []
temp, count = self.front, self.length
while count > 0:
store.append(temp.data)
temp = temp.next
count = count - 1
print store
if __name__ == '__main__':
q= LinkedQueue()
q.isEmpty()
q.init_queue()
q.show_queue()
q.Queue_Head()
q.En_Queue('ennew')
q.Del_Queue()
q.show_queue()
q.getLength()
輸出
True
please input item, # for end:1
please input item, # for end:2
please input item, # for end:3
please input item, # for end:4
please input item, # for end:’#’
[1, 2, 3, 4]
1
1
[2, 3, 4, ‘ennew’]
4
參考連接:https://blog.csdn.net/lqzhouxx/article/details/40863749