链队基本操作(笔记版)

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6

本节主要针对链栈的基本操作进行解析。

# coding:___utf-8___
# author:Guoxuan Sun  time:2023/1/12
#链栈的基本操作
#链栈的创建与顺序栈的区别就是每个结点都有一个指针域
#同时链栈也是有两个指针front和rear
#链栈中的front指针指向的结点是第一个结点不是空姐点
class LinkNode:
    def __init__(self.data=None):
        self.data=data
        self.next=None

class LinkQueue:
    def __init__(self):#一开始创建时两个指针都赋值为None
        self.front=None
        self.rear=None

    def empty(self):#判断队列为空依然是front和rear指向同一个结点但是在链栈中指向同一个结点必定front=rear=None而且front
        #永远在前边front为None的话rear必然也为None所以简化了条件self.front==None
        return self.front==None

#添加和删除操作依然要保持FIFO的特点
    def push(self,e):#添加一个结点
        s=LinkNode(e)#创建一个结点
        if self.empty():#添加第一个节点时front与rear都指向第一个结点
            self.front=self.rear=s
        else:#其他情况依然用next来移动指针
            self.rear.next=s#搞定next域
            self.rear=s#搞定指针指向

    def pop(self)#删除结点返回被删除的元素
        assert not self.empty()
        if self.front==self.rear:#只剩一个结点的情况再删除就没有了
            e=self.front.data
            self.front=self.rear=None
        else:
            e=self.front.data
            self.front=self.front.next#只要实现指针移动即可
        return e

    def gethead(self):#获取头结点
        assert not self.empty()
        e=self.front.data
        return e

 

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6