python链队_队列的链式存储结构

...........................................................................................................................................................

队列是一种先进先出(first in first out,FIFO)的线性表,是一种常用的数据结构。

...........................................................................................................................................................

它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。

...........................................................................................................................................................

.......................................................................................................................................................... 

  1. 一个链队列需要两个指针才能唯一确定,它们分别指示队头和队尾(分别称为头指针和尾指针)
  2. 与线性表的单链表一样,为了操作方便起见, 给链队列添加一个头结点,并令头指针指向头结点
  3. 空的链队列的判别条件为头指针和尾指针均指向头结点

...........................................................................................................................................................

判空:

 def empty(self):
        return self.front==None

 ..........................................................................................................................................................

入队:

    def push(self, data):
        new_node = Node(data)
        if self.front == None:   #为空时
            self.front = new_node #获得首结点
            self.rear = self.front
        else:
            self.rear.next = new_node #将新结点挂上去,让链式结构显现
            self.rear = new_node   #rear指针后移

 出队:

    def pop(self):
        assert not self.empty()
        if self.front == self.rear: #当链队中只有一个元素时
            e=self.front.data      #获取e,让其能够print
            self.front=self.rear=None  #重置为None
        else:
            e=self.front.data
            self.front=self.front.next
        return e

队首元素:

    def gethead(self):
        assert not self.empty()
        e=self.front.data   #front,第一个元素
        return e

源码:

class Node:
    def __init__(self, data=None):
        self.data = data
        self.next = None
class LinkQueue:
    """没有head结点,但需要front和rear指针来挂"""
    def __init__(self):
        self.front = None
        self.rear = None   #始终指向最后一个元素
    def empty(self):
        return self.front==None
    def push(self, data):
        new_node = Node(data)
        if self.front == None:   #为空时
            self.front = new_node #获得首结点
            self.rear = self.front
        else:
            self.rear.next = new_node #将新结点挂上去,让链式结构显现
            self.rear = new_node   #rear指针后移
    def pop(self):
        assert not self.empty()
        if self.front == self.rear: #当链队中只有一个元素时
            e=self.front.data      #获取e,让其能够print
            self.front=self.rear=None  #重置为None
        else:
            e=self.front.data
            self.front=self.front.next
        return e
    def gethead(self):
        assert not self.empty()
        e=self.front.data   #front,第一个元素
        return e

...........................................................................................................................................................

Guff_hys_python数据结构,大数据开发学习,python实训项目-CSDN博客

 ..........................................................................................................................................................

  • 7
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

Guff_hys

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

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

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

打赏作者

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

抵扣说明:

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

余额充值