简介
队列 (queue) 是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。
队列的介绍
队列符合先进先出[FIFO]的原则。因为要排队的第一个项目,最终将是第一个要出列的项目,如在现实生活中的队列,先来的站在队列前面,后来的就只能站在队列后面啦。
队列的演示
实现
#File name :Queue
#Author:龙文汉
#Version:1.0
#Date:20.10.8
#Description:队列的基本实现
#链表实现
class Node(object):
def __init__(self,data):
self.data = data
self.next = None
class Queue(object):
def __init__(self):
self.head = Node(None)
self.tail = self.head
self.length = 0
def Is_Empty(self):
return self.length==0
def In_queue(self,element):
self.tail.next = element
self.tail = element
self.length += 1
def Out_Queue(self):
if self.length == 0:
raise IndexError("This is Empty queue!")
self.head = self.head.next
self.data = None
def Seek(self,element):
temple = self.head.next
for i in range(0,self.length):
if temple.data == element.data:
print(element.data,"'s index is ",i+1)
return
else:
temple = temple.next
def Change(self,old_element,new_element):
temple = self.head.next
while(temple):
if temple.data == old_element.data:
temple.data = new_element.data
return
else:
temple = temple.next
def Print(self):
temple = self.head.next
while(temple):
print(temple.data)
temple = temple.next
def Get_length(self):
return self.length
#列表实现
class Queue_list(Queue):
def __init__(self):
self.list = []
self.length = 0
def In_queue(self,element):
self.list.append(element)
self.length+=1
def Out_Queue(self):
if self.length == 0:
raise IndexError("空队列")
self.list.pop(0)
self.length -= 1
def Seek(self,element):
for i in self.list:
if i.data == element.data:
print(element.data,"'s index is ",self.list.index(i))
return
def Change(self,old_element,new_element):
for i in self.list:
if i.data == old_element.data:
i.data = new_element.data
return
def Print(self):
for i in self.list:
print(i.data)
if __name__ == "__main__":
queue_a = Queue_list();
print(queue_a.Is_Empty(), queue_a.Get_length())
queue_a.In_queue(Node(23))
queue_a.In_queue(Node(100))
queue_a.Print()
print("")
queue_a.Change(Node(23), Node(3333))
queue_a.Print()
print("")
queue_a.Seek(Node(100))
queue_a.Out_Queue()
queue_a.Print()
queue_b = Queue_list();
print(queue_b.Is_Empty(),queue_b.Get_length())
queue_b.In_queue(Node(23))
queue_b.In_queue(Node(100))
queue_b.Print()
print("")
queue_b.Change(Node(23), Node(3333))
queue_b.Print()
print("")
queue_b.Seek(Node(100))
queue_b.Out_Queue()
queue_b.Print()