面试 线程 perl elasticsearch xamarin layout concurrency db2 Avalon Uploadify vue中文 网站后台管理模板 系统后台模板 河南普通话考试 jq点击事件 java数据分析 安卓虚拟机运行windows matlab插值函数 oracle分析函数 java使用mysql java文件写入 java设置 java时间类型 java接口的实例 网页游戏代码 魔兽世界字体包 隐藏虚拟键 一键换系统 防沉迷助手 飞猪ip 视频字幕提取器 什么软件买电影票便宜 红巨人插件 微信公众号点餐系统 苹果手机不弹出信任 服务器之家 批处理for appsync补丁 ps字体描边 淘新闻下载
当前位置: 首页 > 学习教程  > 编程语言

python实现数据结构中双向循环链表操作

2020/10/8 20:07:22 文章标签:

python实现数据结构中双向循环链表操作 看此博客之前建议先看看B站的视频 python数据结构与算法系列课程,该课程中未实现双向循环链表的操作,所以我按照该视频的链表思路实现了双向循环链表的操作,欢迎大家阅读与交流,如有侵权&am…

python实现数据结构中双向循环链表操作

    看此博客之前建议先看看B站的视频 python数据结构与算法系列课程,该课程中未实现双向循环链表的操作,所以我按照该视频的链表思路实现了双向循环链表的操作,欢迎大家阅读与交流,如有侵权,请联系博主!
下面附上代码:

class Node:
    def __init__(self, elem):
        self.elem = elem
        self.prev = None
        self.next = None


class DoubleCycleLinkList:
    def __init__(self, node=None):
        self.__head = node

    def is_empty(self):
        """判空"""
        if self.__head is None:
            return True
        return False

    def length(self):
        """链表长度"""
        if self.is_empty():
            return 0
        cur = self.__head
        count = 1
        while cur.next is not self.__head:
            count += 1
            cur = cur.next
        return count

    def travel(self):
        """遍历链表"""
        if self.is_empty():
            return
        cur = self.__head
        while cur.next is not self.__head:
            print(cur.elem, end=" ")
            cur = cur.next
        print(cur.elem, end=" ")
        print("")

    def add(self, elem):
        """头插法"""
        node = Node(elem)
        if self.is_empty():
            self.__head = node
            node.prev = node
            node.next = node
        else:
            self.__head.prev.next = node
            node.prev = self.__head.prev
            node.next = self.__head
            self.__head.prev = node
            self.__head = node

    def append(self, elem):
        """尾插法"""
        node = Node(elem)
        if self.is_empty():
            self.__head = node
            node.prev = node
            node.next = node
        else:
            node.next = self.__head
            node.prev = self.__head.prev
            self.__head.prev.next = node
            self.__head.prev = node

    def insert(self, pos, elem):
        """任一位置(pos)插入, 下标从0数起"""
        if pos <= 0:
            self.add(elem)
        elif pos > (self.length() - 1):
            self.append(elem)
        else:
            count = 0
            cur = self.__head
            node = Node(elem)
            while count < (pos - 1):
                count += 1
                cur = cur.next
            node.next = cur.next
            node.prev = cur
            node.next.prev = node
            cur.next = node

    def remove(self, elem):
        """删除某一节点,若有多个符合条件的节点,删除第一个即可"""
        if self.is_empty():
            return
        cur = self.__head
        while cur.next is not self.__head:
            if cur.elem == elem:
                if cur is self.__head:
                    self.__head = cur.next
                    cur.prev.next = cur.next
                    cur.next.prev = cur.prev
                else:
                    cur.prev.next = cur.next
                    cur.next.prev = cur.prev
                break
            cur = cur.next
        if cur.elem == elem:
            cur.prev.next = self.__head
            self.head = cur.prev

    def search(self, elem):
        """查找某一个节点"""
        if self.is_empty():
            return False
        cur = self.__head
        while cur.next is not self.__head:
            if cur.elem == elem:
                return True
            cur = cur.next
        # while中处理不到尾节点,所以进行最后尾节点的判断
        if cur.elem == elem:
            return True
        return False

本文链接: http://www.dtmao.cc/news_show_250200.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?