C++数据结构第21课、线性表的链式存储结构

    技术2022-07-11  71

    1、存在的问题

    顺序存储结构线性表的最大问题是:插入和删除需要移动大量的元素,如何解决这个问题?

    2、线性表的链式存储结构

    链式存储的定义:数据元素除了存储本身的信息外,还要存储其直接后继的信息 在物理内存中无相邻关系

    链式存储逻辑结构 — 基于链式存储结构的线性表中,每个结点都包含数据域和指针域 数据域:存储数据元素本身 指针域:存储相邻结点的地址

    3、专业术语的统一

    — 顺序表   基于顺序存储结构的线性表 — 链表   基于链式存储结构的线性表

    4、链表中的基本概念

    — 头结点   链表中的辅助结点,包含指向第一个数据元素的指针

    — 数据结点   链表中代表数据元素的结点,表现形式为:(数据元素,地址)

    — 尾结点   链表中的最后一个数据结点,包含的地址信息尾空

    单链表的结点定义 template <typename T> struct Node : public Object { T value; Node* next; } 单链表的内部结构 头结点在单链表中的意义:辅助数据元素的定位,方便插入和删除,因此,头结点不存储实际的数据元素(我们可以自己定义一个头结点,用 current 这个结点指针指向头结点,current -> next 指向第一个 Node 结点)

    5、在目标位置处插入数据元素

    for(int i = 0; i < size; i++) { current = current->next; } Node* node = new Node(); node->next = current ->next; current ->next = node;

    6、在目标位置处删除数据元素

    for(int i = 0; i < size; i++) { current = current->next; } toDel = current ->next; current ->next = toDel ->next; delete toDel;

    小结:

    链表中的数据元素在物理内存中无相邻关系链表中的节点都包含数据域和指针域头结点用于辅助数据元素的定位,方便插入和删除操作插入和删除操作需要保证链表的完整性
    Processed: 0.014, SQL: 9