IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 数据结构与算法 -> 2022.03.02 -> 正文阅读

[数据结构与算法]2022.03.02

课时29 单项循环链表

原有的单链表为节点应该指向None,而此刻让它指向头节点,变成了单向循环链表。

?

?

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

class SingleLinkList(object):
    def __init__(self,node=None):
        """单向循环链表"""
        self.__head=node
        if node: #如果有节点的话,应该让这个节点指向自己
            node.next=node

    def is_empty(self):
        return self.__head==None

    def length(self):
        if self.is_empty():
            return 0
        else:
            cur=self.__head
            count=1
            if cur.next!=self.__head:
                count+=1
                cur=cur.next
            return count

    def travel(self):
        if self.is_empty():
            return None
        cur=self.__head
        while cur.next!=self.__head:
            print(cur.elem,end=" ")
            cur=cur.next
        #推出循环,cur指向尾节点,但尾节点的元素并没有并打印
        print(cur.elem)

?课时30单向链表插入元素

头插法,前面与单链表相同。

但是需要让尾节点的next区域指向插入的节点。

?

?需要考虑特殊情况,即只有一个节点的场合,和空链表的场合。

尾部插入,则需要让插入后的尾部的next区域指向头节点。

?课时31

查找节点依旧先要遍历。

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

class SingleLinkList(object):
    def __init__(self,node=None):
        """单向循环链表"""
        self.__head=node
        if node: #如果有节点的话,应该让这个节点指向自己
            node.next=node

    def is_empty(self):
        return self.__head==None

    def length(self):
        if self.is_empty():
            return 0
        else:
            cur=self.__head
            count=1
            if cur.next!=self.__head:
                count+=1
                cur=cur.next
            return count

    def travel(self):
        if self.is_empty():
            return None
        cur=self.__head
        while cur.next!=self.__head:
            print(cur.elem,end=" ")
            cur=cur.next
        #推出循环,cur指向尾节点,但尾节点的元素并没有并打印
        print(cur.elem)

    def add(self,item):
        node=Node()
        if self.is_empty():#链表为空的话,cur指向的是none,没有next区域,会报错,所以需要这一步
            self.__head=node
            node.next=node
        else:
            cur=self.__head
            while cur.next!=self.__head:
                cur=cur.next
                #推出循环,cur指向尾节点
            node.next=self.__head
            self.__head=node
            cur.next=self.__head #或者cur.next=node

    def append(self,item):
        node=Node(item)
        if self.is_empty():
            self.__head=node
            node.next=node
        else:
            cur=self.__head
            while cur.next!=self.__head:
                cur=cur.next
            node.next=self.__head
            cur.next=node


    def insert(self, pos, item):  # pos为指定的位置
        """指定位置添加元素"""
        """:param pos 从0开始"""
        if pos <= 0:
            self.add(item)  # pos小于或等于零,那么就是在头部插入元素,即用头插法。
        elif pos > self.lengh() - 1:
            self.append(item)  # 如果pos大于链表最后的下标,那么就是在尾部添加。
        else:
            pre = self.__head
            count = 0
            while count < (pos - 1):
                count += 1
                pre = pre.next
            # 当退出循环后,pre指向pos-1位置
            node = Node(item)
            node.next = pre.next
            pre.next = node

    def search(self,item):
        if self.is_empty():
            return False
        else:
            cur=self.__head
            while cur.next!=self.__head:
                if cur.elem==item:
                    return True
                else:
                    cur=cur.next
        #推出循环,此时指向尾节点,此时需要判断该尾节点是否为查找元素
            if cur.elem==item:
                return True

    def remove(self,item):
        if self.is_empty():
            return False
        cur=self.__head
        pre=None
        while cur.next!=self.__head:
            if cur.elem==item:
                #先判断此节点是否为头节点
                if cur==self.__head:
                    #头结点的时候,要找尾节点去指向头节点后的地方。
                    rear=self.__head
                    while rear.next!=self.__head:
                        rear=rear.next
                    rear.next=cur.next
                    self.__head=cur.next
                else:
                    #中间节点
                    pre.next=cur.next
                return
            else:
                pre=cur
                cur=cur.next
        #推出循坏,指标指向尾节点
        if cur.elem==item:
            if cur==self.__head:
                self.__head==None

            else:
                pre.next=cur.next

  数据结构与算法 最新文章
【力扣106】 从中序与后续遍历序列构造二叉
leetcode 322 零钱兑换
哈希的应用:海量数据处理
动态规划|最短Hamilton路径
华为机试_HJ41 称砝码【中等】【menset】【
【C与数据结构】——寒假提高每日练习Day1
基础算法——堆排序
2023王道数据结构线性表--单链表课后习题部
LeetCode 之 反转链表的一部分
【题解】lintcode必刷50题<有效的括号序列
上一篇文章      下一篇文章      查看所有文章
加:2022-03-04 15:50:05  更:2022-03-04 15:53:17 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 16:58:13-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码