Skip to content

Latest commit

 

History

History
102 lines (64 loc) · 2.58 KB

数据结构-链表.md

File metadata and controls

102 lines (64 loc) · 2.58 KB

概念

链表(Linked List)是一种常见的基础数据结构,是一种线性表,但是并不会按线性的顺序存储数据,而是在每一个节点里存到下一个节点的指针(Pointer)。

特点

效率

  • 插入:O(1)
  • 访问:O(n)

由于不必须按顺序存储,链表在插入的时候可以达到 O(1) 的复杂度,比另一种线性表 —— 顺序表快得多,但是查找一个节点或者访问特定编号的节点则需要 O(n) 的时间,而顺序表相应的时间复杂度分别是 O(log n) 和 O(1)。

优点

使用链表结构可以克服数组链表需要预先知道数据大小的缺点,链表结构可以充分利用计算机内存空间,实现灵活的内存动态管理。

缺点

链表失去了数组随机读取的优点,同时链表由于增加了结点的指针域,空间开销比较大。

常见的链表

  • 单向链表
  • 单向循环链表
  • 双向链表
  • 双向循环链表

单链表

单向链表组成

  • 存储数据元素的数据域
  • 直接后继的指针

定义结构体

type Object interface{}

type Node struct {
    Data Object //定义数据域
    Next *Node  //定义地址域(指向下一个表的地址)
}

type List struct {
    headNode *Node //头节点
}

双向链表

双向链表组成

  • 存储数据元素的数据域
  • 直接后继的指针
  • 直接前驱的指针

定义结构体

// Go SDK 1.21.1 
// /go/src/container/list/list.go
// Element is an element of a linked list.
type Element struct {
    // Next and previous pointers in the doubly-linked list of elements.
    // To simplify the implementation, internally a list l is implemented
    // as a ring, such that &l.root is both the next element of the last
    // list element (l.Back()) and the previous element of the first list
    // element (l.Front()).
    next, prev *Element
    
    // The list to which this element belongs.
    list *List
    
    // The value stored with this element.
    Value interface{}
}

相关题型

简单题型

思维导图

图片版

数据结构-链表-思维导图.jpg

pdf

数据结构-链表-思维导图.pdf

在线查看

数据结构-链表-思维导图.html