1、判断队列是否为空
def is_empty(self):
return self._length==0
2、判断队列的长度
def length(self):
return self._length
3、添加一个元素item到队尾
def push(self,item):
新建一个node节点
node=Node(item)
如果队列为空
if self.empty():
self.head=node
self.rear=node
else:
self.rear.next=node
self.rear=node
当原链表为空时,新增1个节点
头节点self.head指向node节点
同时尾节点self.rear指向node节点
新增的node节点的指针域不指向其他节点,指针域为空
原链表不为空时,新增一个节点
node=Node(2)
self.rear.next=node
self.rear=node
4、抛出队首元素
def pop(self):
if is_empty():
raise ValueError('队列为空')
else:
value=self.head.data
self.head=self.head.next
self._length-=1
return value
5、获取对头
def seek(self):
if self.is_empty():
raise ValueError('队列为空')
else:
return self.head.data
代码块
class Node:
def __init__(self,data,_next=None):
self.data=data #数据域
self.next=_next #指针域
class Queue:
def __init__(self):
self.head=None #队列的队头
self.rear=None #队列的队尾
self._length=0 #队列的长度
def is_empty(self):
return self._length==0
def length(self):
return self._length
def push(self,item):
#添加一个元素item到队尾
node=Node(item)
#如果队列为空
if self.is_empty():
self.head=node
self.rear=node
else:
#让现在队尾的next节点指向新的node节点
self.rear.next=node
#让队尾节点指向新的节点
self.rear=node
self._length+=1
def pop(self):
#抛出队首元素
if self.is_empty():
raise ValueError('队列为空')
value=self.head.data
self.head=self.head.next
self._length -= 1
return value
def peek(self):
if self.is_empty():
raise ValueError('队列为空')
return self.head.data
if __name__ == '__main__':
queue=Queue()
queue.push(1)
queue.push(2)
queue.push(3)
queue.push(4)
print(queue.length())
print(queue.pop())
print(queue.pop())
print(queue.pop())
print(queue.pop())
#print(queue.pop())