链表

线性表的链式存储实现

1. 线性表的链式存储实现

不要求逻辑上相邻的两个元素物理上也相邻,通过 建立起数据元素之间的逻辑关系

  • 插入、删除 不需要移动数据元素,只需要修改

typedef struct LNode* List;
struct LNode {
    ElementType Data;
    List next;
};

struct LNode L;
List PtrL;

2. 主要操作的实现

2.1 求表长

int Length(List PtrL) {
    List p = PtrL;
    int j = 0;
    while (p) {
        p = p->next;
        j++;
    }
    return j;
}

时间性能为 O(n)O(n)

2.2 查找

平均时间性能为 O(n)O(n)

2.3 插入(在第 i(1in+1)i (1 \le i \le n + 1) 个位置上插入一个值为 XX 的新元素)

  • 先构建一个新结点,用 s 指向

  • 再找到链表的第 i-1 个结点,用 p 指向

  • 然后修改指针,插入结点(p 之后插入新结点是 s)

平均查找次数为 n/2n/2 ,平均时间性能为 O(n)O(n)

2.4 删除(删除表的第 i(1in)i (1 \le i \le n) 个位置上的元素)

  • 先找到链表的第 i-1 个结点,用 p 指向

  • 再用指针 s 指向要被删除的结点(p 的下一个结点)

  • 然后修改指针,删除 s 所指结点

  • 最后释放 s 所指结点的空间

平均查找次数为 n/2n/2 ,平均时间性能为 O(n)O(n)

最后更新于

这有帮助吗?