Python数据结构与算法之链表定义与用法实例详解【单链表、循环链表】

Python数据结构与算法之链表定义与用法实例详解

什么是链表?

链表是一种常见的数据结构,它由一个个的节点组成,每个节点包含两部分,一部分存储数据,一部分存储下一个节点在哪里的指针。通过节点之间的指针,就可以将节点串起来,形成一个链表。

链表和数组是两种截然不同的数据结构,数组的元素在内存中是连续存储的,而链表的节点却可以分散在内存的不同位置,这也是链表灵活性的一大体现,它可以根据实际情况灵活地分配空间,避免了数组因空间不足而无法存储的情况。同时,链表的节点插入和删除操作也比较方便,相对于数组,时间复杂度也更低。

在Python中,也有链表的实现方式,本文将介绍两种常见的链表:单链表和循环链表。

单链表

单链表的定义

单链表是最简单的一种链表,它的每个节点只包含一个指向下一个节点的指针,最后一个节点的指针指向NULL。

在Python中,我们可以通过定义一个Node类来实现单链表的节点,如下:

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

其中,data表示该节点存储的数据,next表示该节点指向的下一个节点。

单链表的用法实例

实例1:遍历单链表

下面是一个遍历单链表的示例代码,该代码会输出单链表中所有节点的数据:

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

def print_list(head):
    cur = head
    while cur is not None:
        print(cur.data)
        cur = cur.next

# 创建一个单链表
head = Node(1)
head.next = Node(2)
head.next.next = Node(3)

# 遍历单链表并输出每个节点的数据
print_list(head)

上面的代码首先创建了一个单链表,然后调用了print_list函数遍历该链表并输出每个节点的数据。

输出结果为:

1
2
3

实例2:向单链表中插入节点

下面是向单链表中插入节点的示例代码,该代码会向单链表的末尾插入一个新节点。

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

def insert_node(head, data):
    new_node = Node(data)
    cur = head
    while cur.next is not None:
        cur = cur.next
    cur.next = new_node

# 创建一个单链表
head = Node(1)
head.next = Node(2)
head.next.next = Node(3)

# 向单链表中插入新节点
insert_node(head, 4)

# 遍历单链表并输出每个节点的数据
print_list(head)

上面的代码首先创建了一个单链表,然后调用了insert_node函数向该链表末尾插入一个新节点。

输出结果为:

1
2
3
4

循环链表

循环链表的定义

循环链表和单链表类似,不同之处在于它的最后一个节点指针不为空,而是指向链表的头结点。

在Python中,我们可以通过定义一个Node类来实现循环链表的节点,如下:

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

循环链表的用法实例

实例1:遍历循环链表

下面是一个遍历循环链表的示例代码,该代码会输出循环链表中所有节点的数据。

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

def print_list(head):
    cur = head
    while cur.next != head:
        print(cur.data)
        cur = cur.next
    print(cur.data)

# 创建一个循环链表
head = Node(1)
head.next = Node(2)
head.next.next = Node(3)
head.next.next.next = head

# 遍历循环链表并输出每个节点的数据
print_list(head)

上面的代码首先创建了一个循环链表,然后调用了print_list函数遍历该链表并输出每个节点的数据。

输出结果为:

1
2
3
1

实例2:向循环链表中插入节点

下面是向循环链表中插入节点的示例代码,该代码会向循环链表的末尾插入一个新节点。

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

def insert_node(head, data):
    new_node = Node(data)
    cur = head
    while cur.next != head:
        cur = cur.next
    cur.next = new_node
    new_node.next = head

# 创建一个循环链表
head = Node(1)
head.next = Node(2)
head.next.next = Node(3)
head.next.next.next = head

# 向循环链表中插入新节点
insert_node(head, 4)

# 遍历循环链表并输出每个节点的数据
print_list(head)

上面的代码首先创建了一个循环链表,然后调用了insert_node函数向该链表末尾插入一个新节点。

输出结果为:

1
2
3
4
1

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python数据结构与算法之链表定义与用法实例详解【单链表、循环链表】 - Python技术站

(0)
上一篇 2023年5月17日
下一篇 2023年5月17日

相关文章

  • Java数据结构之对象的比较

    Java数据结构之对象的比较 在Java中,对象的比较是非常重要的操作。我们常常需要对不同的对象进行比较,以便对它们进行排序、按照某个条件过滤等操作。本文将详细讲解Java中对象的比较,并给出一些示例来说明。 对象的比较方法 Java中有两种对象比较方法:值比较和引用比较。值比较就是比较两个对象的值是否相等,而引用比较是比较两个对象是否是同一个对象。 值比较…

    数据结构 2023年5月17日
    00
  • java实现队列数据结构代码详解

    Java实现队列数据结构代码详解 1. 队列数据结构简介 队列(Queue)是一种先进先出(FIFO)的数据结构,支持在一端插入元素,在另一端删除元素并返回删除的元素。其操作包括入队(enqueue)和出队(dequeue)。 2. 队列实现方法 队列可以通过数组或链表来实现。其中,数组实现的队列称为顺序队列,链表实现的队列称为链式队列。 2.1 顺序队列 …

    数据结构 2023年5月17日
    00
  • C++超详细讲解单链表的实现

    首先我们来了解一下单链表的概念。 单链表是一种常见的数据结构,在计算机科学中被广泛使用。它是由节点所组成的数据结构,其中每个节点都包含两部分,一个是存储数据的元素,另一个是指向下一个节点的指针。单链表的首节点被称为头部,而最后一个节点则被称为尾部。单链表可以通过在头部插入和删除元素来实现高效地数据操作。接下来我们将讲解如何实现一个 C++ 版的单链表。 实现…

    数据结构 2023年5月17日
    00
  • 排序算法之详解选择排序

    引入 选择排序顾名思义是需要进行选择的,那么就要问题了,选择到底是选择什么呢? 选择排序的选择是选择数组中未排序的数组中最小的值,将被选择的元素放在未排序数组的首位 如果你对 ‘未排序数组’ , ‘选择’ 的概念不理解,那么你可以看看下面的图 思路 有了上面的一些基础之后,我们再来说说选择排序算法的思路 不断的选择未排序数组中最小的值,将其与未排序数组的首位…

    算法与数据结构 2023年4月25日
    00
  • Java数据结构之KMP算法的实现

    Java数据结构之KMP算法的实现 1. KMP算法的概述 KMP算法的全称是Knuth-Morris-Pratt算法,是一种字符串匹配算法,用于在文本串S内查找一个模式串P的出现位置。它的特点是在P和S两个序列中,当匹配失败时,它会跳过P的部分已匹配的字符,利用这个信息来减少S和P之间的匹配次数,从而提高匹配效率。 2. KMP算法的实现 2.1 预处理失…

    数据结构 2023年5月17日
    00
  • Java链表数据结构及其简单使用方法解析

    Java链表数据结构及其简单使用方法解析 概述 链表是一种非线性结构,由一系列节点按照顺序连接而成。每个节点由数据域和指针域组成,数据域用于存储数据,指针域用于指向下一个节点或者上一个节点。在Java中,链表有多种实现方式,常见的有单向链表、双向链表等。 单向链表的实现 以下是一个单向链表的实现代码示例: public class Node { privat…

    数据结构 2023年5月17日
    00
  • 8个简单部分开启Java语言学习之路 附java学习书单

    8个简单部分开启Java语言学习之路 如果你想要学习Java语言,但是不知道从何入手,在这里,我们将为你提供一份简单易懂的攻略,分8个步骤带你开启Java语言学习之路。 1. 安装Java开发工具 Java学习的第一步是安装Java开发工具,目前比较流行的Java开发工具有多种,例如Eclipse、Intellij IDEA、NetBeans等。本攻略以In…

    数据结构 2023年5月17日
    00
  • Java数据结构之栈与队列实例详解

    Java数据结构之栈与队列实例详解攻略 简介 栈和队列是常见的数据结构,在Java中也有对应的实现方式。本文将介绍栈和队列的概念、常见实现方式、应用场景和两个示例。 栈 概念 栈是一种具有后进先出(Last In First Out)特性的数据结构。栈可以使用数组或链表实现。 常见实现方式 基于数组的栈实现 使用数组作为底层存储结构实现栈时,需要注意栈顶指针…

    数据结构 2023年5月17日
    00
合作推广
合作推广
分享本页
返回顶部