Python实现的数据结构与算法之链表详解

下面是详细讲解“Python实现的数据结构与算法之链表详解”的完整攻略,包括链表的定义、链表的基本操作链表的应用和两个示例说明。

链表定义

链表是一种常见的数据结构,它由一系列节点组成,每个节点包含数据和指向下一个节点的指针。链表的头节点指向第一个节点,尾节点指向最后一个节点,如果链表为空,则头节点和尾节点都为None。

链表基本操作

链表的基操作包括插入、删除、查找和遍历。

插入

链表的插入操作包括在链表头部插入节点、在链表尾部插入节点和在链表中间插节点。具体实现如下:

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

class LinkedList:
    def __init__(self):
        self.head = None

    def insert_at_beginning(self, data):
        new_node = Node(data)
        new_node.next = self.head
        self.head = new_node

    def insert_at_end(self, data):
        new_node = Node(data)
        if self.head is None:
            self.head = new_node
            return
        last_node = self.head
        while last_node.next:
            last_node = last_node.next
        last_node.next = new_node

    def insert_after_node(self, prev_node, data):
        if not prev_node:
            print("Previous node is not in the list")
            return
        new_node = Node(data)
        new_node.next = prev_node.next
        prev_node.next = new_node

上述代码中,定义了一个Node类和一个LinkedList类。Node类表示链表中的节点,LinkedList类表示链表。在LinkedList类中,定义了三个插入操作:在链表头部插入节点、在链表尾部插入节点和在链表中间插入节点。

删除

链表的删除操作包括删除链表头部节点、删除链表尾部节点和删除链表中间节点。具体实现如下:

class LinkedList:
    def __init__(self):
        self.head = None

    def delete_at_beginning(self):
        if self.head is None:
            return
        self.head = self.head.next

    def delete_at_end(self):
        if self.head is None:
            return
        if self.head.next is None:
            self.head = None
            return
        last_node = self.head
        while last_node.next.next:
            last_node = last_node.next
        last_node.next = None

    def delete_node(self, key):
        current_node = self.head
        if current_node and current_node.data == key:
            self.head = current_node.next
            current_node = None
            return
        prev_node = None
        while current_node and current_node.data != key:
            prev_node = current_node
            current_node = current_node.next
        if current_node is None:
            return
        prev_node.next = current_node.next
        current_node = None

上述代码中,定义了一个LinkedList类。在LinkedList类中,定义了三个删除操作:删除链表头部节点、删除链表尾部节点和删除链表中间节点。

查找

链表的查找操作包括查找链表中的某个节点和查找链表中的某个节点的位置。具体实现如下:

class LinkedList:
    def __init__(self):
        self.head = None

    def search_node(self, key):
        current_node = self.head
        while current_node:
            if current_node.data == key:
                return True
            current_node = current_node.next
        return False

    def get_node_position(self, key):
        current_node = self.head
        position = 1
        while current_node:
            if current_node.data == key:
                return position
            current_node = current_node.next
            position += 1
        return None

上述代码中,定义了一个LinkedList类。在LinkedList类中,定义了两个查找操作:查找链表中的某个节点和找链中的某个节点的位置。

遍历

链表的遍历操作包括遍历整个链表并输出链表中的每个节点。具体实现如下:

class LinkedList:
    def __init__(self):
        self.head = None

    def print_list(self):
        current_node = self.head
        while current_node:
            print(current_node.data)
            current_node = current_node.next

上述代码中,定义了一个LinkedList类。在LinkedList类中,定义了一个遍历操作:遍历整个链表并输出链表中的每个节点。

链表的应用

链表常用于实现栈队列和哈希表等数据结构。此外,链表还可以用于实现大整数的加减乘除运算。

示例说明

以下两个示例,说明如何使用链表进行操作。

示例1

使用链表实现一个栈。

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

class Stack:
    def __init__(self):
        self.head = None

    def push(self, data):
        new_node = Node(data)
        new_node.next = self.head
        self.head = new_node

    def pop(self):
        if self.head is None:
            return None
        popped_node = self.head
        self.head = self.head.next
        popped_node.next = None
        return popped_node.data

上述代码中,定义了一个Node类和一个Stack类。Node类表示链表中的节点,Stack类表示栈。在Stack类中,定义两个操作:push操作和pop操作。

示例2

使用链表实现一个队列。

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

class Queue:
    def __init__(self):
        self.head = None
        self.tail = None

    def enqueue(self, data):
        new_node = Node(data)
        if self.tail is None:
            self.head = new_node
            self.tail = new_node
        else:
            self.tail.next = new_node
            self.tail = new_node

    def dequeue(self):
        if self.head is None:
            return None
        dequeued_node = self.head
        self.head = self.head.next
        if self.head is None:
            self.tail = None
        dequeued_node.next = None
        return dequeued_node.data

上述代码中,定义了一个Node类和一个Queue类。Node类表示链表中节点,Queue类表示队列。在Queue类中,定义了两个操作:enqueue操作和dequeue操作。

结语

本文介绍了链表的定义、链表的基本操作、链表的应用和两个示例说明。链表是一种常见的数据结构,常用于实现栈、队列和哈希表等数据结构。在实际应中,需要根据具体情况选择适当的数据结构,并根据具体情况调整。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python实现的数据结构与算法之链表详解 - Python技术站

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

相关文章

  • python三引号输出方法

    当我们需要在 Python 中输出长篇文字时,使用三引号输出方法可以避免在每行文字的行末添加换行符,与普通字符串变量的定义方式有所不同。下面是使用三引号方式定义字符串变量的语法: variable_name = ”’ Long text here ”’ 其中 ”’ 表示三个连续的单引号,将所有文本包围在其中,可以在句首句尾包含换行符和缩进。下面进行更详…

    python 2023年5月20日
    00
  • 信号处理程序在 python 中不起作用

    【问题标题】:signal handler not working in python信号处理程序在 python 中不起作用 【发布时间】:2023-04-06 12:42:01 【问题描述】: 我正在 Raspberry Pi 上编写一个异步视频播放程序。我需要在子进程中运行 omxplayer 并在主进程中接收输入。当接收到一些输入时,主进程会将信号发…

    Python开发 2023年4月7日
    00
  • Python安装lz4-0.10.1遇到的坑

    下面是详细讲解 Python 安装 lz4-0.10.1 遇到的坑的完整攻略: 准备工作 首先需要确保系统中已经安装好了 Python 和 pip 工具。如果没有安装,可以通过以下步骤安装: 在 Linux 上,可以使用以下命令安装: # 安装 Python sudo apt-get install python # 安装 pip sudo apt-get …

    python 2023年6月3日
    00
  • Golang中由零值和gob库特性引起BUG解析

    本攻略将讲解Golang中的零值与gob库的特性引起的BUG,主要包括以下几个方面的内容: 什么是Go中的零值? 什么是gob库? gob库的特性引起的BUG 如何避免由gob库特性造成的BUG。 什么是Go中的零值? 在Go语言中,每个类型都有一个零值,它是指该类型的一个默认值。在声明变量但没有给出初始值时,变量将被赋予零值。比如,字符串类型的零值为空字符…

    python 2023年6月2日
    00
  • 分步骤教你用python一步步提取PPT中的图片

    以下是详细的“分步骤教你用python一步步提取PPT中的图片”的攻略: 一、获取PPT文件并导入必要的库 首先需要用Python获取要提取图片的PPT文件,可以使用Python的os或glob库来读取文件。接下来,我们需要导入pptx和PIL这两个库,pptx库是Python处理PPT文件的重要库,PIL库用来处理图片。 import os from pp…

    python 2023年6月3日
    00
  • python中常见的5种框架解读

    下面是 Python 中常见的 5 种框架的详细解读。 1. Django Django 是一个由 Python 写成的高级 Web 开发框架,它的核心理念是:”Don’t Repeat Yourself”(DRY)。 Django 已经集成了许多常用的功能模块,如:数据库 ORM(Object-Relational Mapping)映射关系、路由系统、表单…

    python 2023年6月3日
    00
  • Python decimal模块使用方法详解

    Python的decimal模块是用于高精度计算的一个重要工具,它的使用需要了解一些基本概念和方法。下面详细讲解一下decimal模块的使用方法,帮助初学者更好地掌握这个强大的工具。 一、decimal模块介绍 decimal模块是python内置的用于高精度计算的模块,它对于精确计算非常友好。它提供了一种Decimal数据类型,用于表示浮点数的十进制表示形…

    python 2023年6月3日
    00
  • Python使用Beautiful Soup(BS4)库解析HTML和XML

    Python使用BeautifulSoup(BS4)库解析HTML和XML 在本文中,我们将介绍如何使用Python的BeautifulSoup库解析HTML和XML。我们将使用BeautifulSoup库来解析HTML和XML文档,并提取其中的数据。 步骤1:安装BeautifulSoup库 在使用BeautifulSoup库之前,我们需要先安装它。以下是…

    python 2023年5月15日
    00
合作推广
合作推广
分享本页
返回顶部