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

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

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

python链队_队列的链式存储结构_第1张图片

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

    python链队_队列的链式存储结构_第2张图片

判空:

 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

 

 

你可能感兴趣的:(python数据结构,python,开发语言,学习方法,链表,数据结构,算法)