链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的

链表由一系列结点组成,结点可以在运行时动态生成

优点

由于不必须按顺序存储,链表在插入、删除的时候可以达到O(1)的复杂度,比线性表快得多

缺点

相比于线性表顺序结构操作复杂,查找一个节点或者访问特定编号的节点则需要O(n)的时间,而线性表和顺序表相应的时间复杂度分别是O(logn)和O(1)

分类

单向链表

单向链表的链接方向是单向的,对链表的访问要从头部开始顺序读取

组成

每个结点包括两个部分:

是存储数据元素的数据域,

存储下一个结点地址的指针域

示例:

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

操作

  • 遍历
  • 插入、删除
  • 建立
    • 头插法
    • 尾插法
class Node(object):
def __init__(self, item=None):
self.item = item
self.next = None def traversal(head_node):
"""链表的遍历"""
cur_node = head_node
while cur_node is not None:
print(cur_node.item)
cur_node = cur_node.next def add(value, cur_node):
"""链表的插入,在当前节点之后插入新的节点"""
new_node = Node(value)
new_node.next, cur_node.next = cur_node.next, new_node def delete(cur_node):
"""链表的删除,删除当前节点之后的节点"""
tar_node = cur_node.next
cur_node.next = cur_node.next.next
del tar_node def create_linklist_f(li):
"""头插法建立链表"""
head = Node()
for num in li:
temp = Node(num)
temp.next, head.next = head.next, temp
return head def create_linklist_r(li):
"""尾插法建立链表"""
head = Node()
r_node = head
for num in li:
temp = Node(num)
r_node.next, temp.next = temp, None
r_node = r_node.next
return head

双向链表

双向链表每个数据结点中都有两个指针,分别指向直接后继和直接前驱,所以从双向链表中的任意一个结点开始,都可以很方便地访问它的前驱结点和后继结点

组成

每个结点包括两个部分:

是存储数据元素的数据域,

存储下一个结点地址的指针域

示例:

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

循环链表

表中最后一个结点的指针域指向头结点,整个链表形成一个环

组成

每个结点包括两个部分:

是存储数据元素的数据域,

存储下一个结点地址的指针域

示例:

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

Python 链表(linked list)的更多相关文章

  1. Python链表的实现与使用(单向链表与双向链表)

    参考[易百教程]用Python实现链表及其功能 """ python链表的基本操作:节点.链表.增删改查 """ import sys cl ...

  2. 链表Linked List

    链表Linked List 1. 链表 数组是一种顺序表,index与value之间是一种顺序映射,以O(1)O(1)的复杂度访问数据元素.但是,若要在表的中间部分插入(或删除)某一个元素时,需要将后 ...

  3. 算法与数据结构基础 - 链表(Linked List)

    链表基础 链表(Linked List)相比数组(Array),物理存储上非连续.不支持O(1)时间按索引存取:但链表也有其优点,灵活的内存管理.允许在链表任意位置上插入和删除节点.单向链表结构一般如 ...

  4. Python链表操作(实现)

    Python链表操作 在Python开发的面试中,我们经常会遇到关于链表操作的问题.链表作为一个非常经典的无序列表结构,也是一个开发工程师必须掌握的数据结构之一.在本文中,我将针对链表本身的数据结构特 ...

  5. 数据结构之链表(Linked list)

    说明:如果仔细阅读完全文后,可能感觉有些不统一,这里先说明下原因. 链表尾引用不统一:在介绍单链表时,只有一个链表首部的引用(head) 指向第一个节点.你看到后面关于双链表及循环列表时,除了指向第一 ...

  6. LeetCode 141:环形链表 Linked List Cycle

    给定一个链表,判断链表中是否有环. 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始). 如果 pos 是 -1,则在该链表中没有环. Given a l ...

  7. 【LeetCode题解】链表Linked List

    1. 链表 数组是一种顺序表,index与value之间是一种顺序映射,以\(O(1)\)的复杂度访问数据元素.但是,若要在表的中间部分插入(或删除)某一个元素时,需要将后续的数据元素进行移动,复杂度 ...

  8. 数据结构与算法 —— 链表linked list(01)

    链表(维基百科) 链表(Linked list)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针(Pointer).由于不必须按顺序存储, ...

  9. 数据结构与算法 —— 链表linked list(03)

    继续关于linked list的算法题: 删除排序链表中的重复元素 给定一个排序链表,删除所有重复的元素使得每个元素只留下一个. 案例: 给定 1->1->2,返回 1->2 给定  ...

随机推荐

  1. win7 Adobe flash player 无法在线更新

    1.win7 Adobe flash player 无法在线更新,提示应用程序初始化错误 解决方法: 1.https://www.flash.cn/看一下支持的版本,网上找对应版本离线包下载安装即可 ...

  2. Go module的两个代理源和设置方法

    Go module的两个代理源 阿里云 https://mirrors.aliyun.com/goproxy/ 使用帮助 1.使用go1.11以上版本并开启go module机制 2.导出GOPROX ...

  3. 洛谷 P5690 [CSP-SJX2019]日期

    传送门 思路 大水题一道,判断一下即可 输入直接用快读读两个数就行了,不需要读一个\(char\)类型的字符 年月不能为\(0\),月份不能超过\(12\),天数不能超过\(31\) 另外在二月天数的 ...

  4. Keras保存模型并载入模型继续训练

    我们以MNIST手写数字识别为例 import numpy as np from keras.datasets import mnist from keras.utils import np_util ...

  5. EF Core 3.0 Preview 9 的2个小坑

    之前我们的数据库服务器使用的是 SQL Server 2008 R2 ,由于从 EF Core 3.0 Preview 6 开始不支持 UseRowNumberForPaging ,只能停留在 EF ...

  6. Python连载45-XML解析(使用minidom和etree分别示例)

    一.我们对XML的读取进行一波演示 import xml.dom.minidom #负责解析xml文件的包 from xml.dom.minidom import parse ​ #使用minidom ...

  7. 新安装ubuntu系统的简单优化

    新安装的ubuntu系统,需要做下简单的优化,使其符合常用习惯,优化过程的命令与centos大都不一致,撰文备份,以备所需: 1.获取ubuntu系统root权限 在终端输入sudo passwd r ...

  8. java循环定时器@Scheduled的使用

    @Scheduled 注解 用于定时循环执行任务 例如: @Scheduled(cron="0 */10 * * * ?") 表示每隔十分钟执行一次 每隔5秒执行一次:" ...

  9. 黄聪:mysql的SQL_CALC_FOUND_ROWS 使用 类似count(*) 使用性能更高

    mysql的SQL_CALC_FOUND_ROWS 使用 类似count(*) 使用性能更高 在很多分页的程序中都这样写: SELECT COUNT(*) from `table` WHERE ... ...

  10. concurrent.futures模块简单介绍(线程池,进程池)

    一.基类Executor Executor类是ThreadPoolExecutor 和ProcessPoolExecutor 的基类.它为我们提供了如下方法: submit(fn, *args, ** ...