Python重现数据结构--队列的实现(链表与数组(列表)实现)

    科技2025-11-26  19

    简介

    队列 (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()
    Processed: 0.018, SQL: 9