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

简介

队列 (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()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Hanzoe_lwh

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值