数据结构:链表

简介: 数据结构:链表

1.单链表的逻辑结构与存储结构


1.1逻辑结构


逻辑结构:数据元素之间的逻辑关系


集合、线性结构(一对一)、树形结构(一对多)、图结构(多对多)


1.2存储结构


存储结构:顺序存储、链式存储、索引存储、散列存储


顺序存储(顺序表):逻辑上相邻的元素物理位置也相邻


链式存储(单链表):逻辑上相邻的元素物理位置不一定相邻


2.单链表的定义


定义单链表:


class ListNode:
    def __init__(self,val=0,next=None):
        self.val=val
        self.next=next

带头结点的单链表(写代码方便):

0748abb7af77cc20a11522d5d871d985_649c603d2c3f9e22c7139f91c183fa2b.png


不带头结点的单链表(写代码麻烦):

62389ba01e756d357a79e50934d0120b_afdffa9740eaa825743770b29b2c5a89.png


3.插入元素


3.1带头节点的单链表


#在第i个位置插入元素
def Insert(head,i,elem):
    assert i >=0
    cur = head
    while i!=0:
        i-=1
        cur=cur.next
        if not cur:
            return False
    temp=cur.next
    cur.next=elem
    elem.next=temp
    return True


3.2不带头节点的单链表


#在第i个位置插入元素
def Insert(i,elem)
    global head
    assert i>=0
    if i==0:
        elem.next=head
        head=elem
    cue=head
    while i>1:
    i-=1
    cur=cur.next
    if not cur:
        return Flase
    temp=cur.next
    cur.next=elem
    elem.next=temp
    return True


4.删除元素


def ListDelete( head, i) :
    assert i >= 0
    cur = head
    while i != 0:
        i -= 1
        cur = cur.next
        if not cur.next:
            return False
    cur.next = cur.next.next
    return True


5.创建单链表


5.1尾插法创建单链表


带头节点的单链表:


def BuildLink_Tai1(1):
    head = ListNode( )
    temp = head
    for elem in l:
        temp.next = ListNode(elem)
        temp = temp.next
    return head
head = BuildLink_Tail([1,2,3,4])
while head.next:
    head = head.next
    print( head.val)

不带头节点的单链表:


def BuildLink_Tail(1):
    if not l:
        return None
    head = ListNode(l[0])
    temp = head
    for elem in 1[1:]:
        temp.next = ListNode(elem)
        temp = temp.next
    return head
head = BuildLink_Tail([1,2,3,4])
while head:
    print( head.val)
    head = head.next


5.2头插法创建单链表


带头节点的单链表:


def BuildLink_Head( 1) :
    head = ListNode()
    for elem in l:
        temp = head.next
        head.next = ListNode(elem,temp)
    return head

不带头节点的单链表:


def BuildLink_Head(1):
    head = None
    for elem in l:
        head = ListNode(elem,head)
    return head


6.双链表


解决单链表无法逆向索引的问题

cc394a92546d0727e0fa0aa86ffd2d7b_b529d91fd83020ea81741567c0c0c584.png


class DLinkNode:
    def __init__(self, val=0,next=None,prior):
    self.val = val
    self.next = next
    self.prior = prior


7.循环链表


7.1循环单链表


从一个节点出发可以找到其他任何节点

1fbc0090dc91f947aaaffd99220285ed_0ebfa60b8f94a82badd8037ae8391704.png


7.2循环双链表


从头找到尾和从尾找到头时间复杂度都是O(1)

5bc253072a4be86fe998345048de1d4f_8ced43b7eb4bd35fc69dca61f94b2952.png


目录
相关文章
|
28天前
|
存储 算法 Perl
数据结构实验之链表
本实验旨在掌握线性表中元素的前驱、后续概念及链表的建立、插入、删除等算法,并分析时间复杂度,理解链表特点。实验内容包括循环链表应用(约瑟夫回环问题)、删除单链表中重复节点及双向循环链表的设计与实现。通过编程实践,加深对链表数据结构的理解和应用能力。
53 4
|
20天前
|
存储 缓存 算法
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式,强调了合理选择数据结构的重要性,并通过案例分析展示了其在实际项目中的应用,旨在帮助读者提升编程能力。
43 5
|
1月前
|
存储 C语言
【数据结构】手把手教你单链表(c语言)(附源码)
本文介绍了单链表的基本概念、结构定义及其实现方法。单链表是一种内存地址不连续但逻辑顺序连续的数据结构,每个节点包含数据域和指针域。文章详细讲解了单链表的常见操作,如头插、尾插、头删、尾删、查找、指定位置插入和删除等,并提供了完整的C语言代码示例。通过学习单链表,可以更好地理解数据结构的底层逻辑,提高编程能力。
76 4
|
1月前
|
算法 安全 搜索推荐
2024重生之回溯数据结构与算法系列学习之单双链表精题详解(9)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第2.3章之IKUN和I原达人之数据结构与算法系列学习x单双链表精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
1月前
|
存储 Web App开发 算法
2024重生之回溯数据结构与算法系列学习之单双链表【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构之单双链表按位、值查找;[前后]插入;删除指定节点;求表长、静态链表等代码及具体思路详解步骤;举例说明、注意点及常见报错问题所对应的解决方法
|
28天前
|
算法
数据结构之购物车系统(链表和栈)
本文介绍了基于链表和栈的购物车系统的设计与实现。该系统通过命令行界面提供商品管理、购物车查看、结算等功能,支持用户便捷地管理购物清单。核心代码定义了商品、购物车商品节点和购物车的数据结构,并实现了添加、删除商品、查看购物车内容及结算等操作。算法分析显示,系统在处理小规模购物车时表现良好,但在大规模购物车操作下可能存在性能瓶颈。
44 0
|
2月前
|
存储 Java
数据结构第三篇【链表的相关知识点一及在线OJ习题】
数据结构第三篇【链表的相关知识点一及在线OJ习题】
29 7
|
2月前
|
存储 安全 Java
【用Java学习数据结构系列】探索顺序表和链表的无尽秘密(附带练习唔)pro
【用Java学习数据结构系列】探索顺序表和链表的无尽秘密(附带练习唔)pro
27 3
|
2月前
|
算法 Java
数据结构与算法学习五:双链表的增、删、改、查
双链表的增、删、改、查操作及其Java实现,并通过实例演示了双向链表的优势和应用。
21 0
数据结构与算法学习五:双链表的增、删、改、查
【数据结构】——双向链表详细理解和实现
【数据结构】——双向链表详细理解和实现