简介
队列 (queue) 是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。
队列的介绍
队列符合先进先出[FIFO]的原则。因为要排队的第一个项目,最终将是第一个要出列的项目,如在现实生活中的队列,先来的站在队列前面,后来的就只能站在队列后面啦。
队列的演示
实现
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
()