数据结构(二)

- 线性表
    - 定义:n个数据元素的有限序列
    - 线性表的抽象数据类型
        ADT List {
            D = {a[i] | a[i] is ElemSet, i = [0, n], n >= 0}
            R = { <a[i-1], a[i]> | a[i-1],a[i] in D, i = [1, n]}  //前驱关系
            P
                InitList(&L)
                DestyoyList(&L)
                ClearList(L)
                ListEmpty(L)
                ListLength(L)
                GetElem(L, i, &e)
                LocateElem(L, e, compare())
                PriorElem(L, cur_e, &pre_e)
                NextElem(L, cur_e, &next_e)
                ListInsert(&L, i, e)
                ListDelete(&L, i, &e)
                ListTraverse(L, visit())
        }ADT List
    - 线性表的顺序存储结构
        - 通过数组方式实现线性表, 存取的复杂度为O(1),但是插入和删除的复杂度为O(n)
        - 数组长度难以确定、容易造成空间碎片
        - 适用于少修改,多查询的情况
    - 线性表的链式存储结构
        - 通过链表方式实现线性表, 存取复杂度为O(n), 在已知前驱位置的情况下插入和删除复杂度为O(1)
        - 适用于多次修改或者容量未知的情况
        - 头指针和头节点
            - 头指针:一定是指向线性表的第一个节点(可为空,必须有)
            - 头节点:为了操作数据的便利可以添加头节点,数据域无意义(可以存储长度或自定义)(非必要元素)
        - 静态链表:通过数组来实现链表
        - 循环链表:尾结点指向头结点的链表(可以在O(1)时间类找到尾部和头部)
        - 双向链表:每个结点有2个指针域直线前驱和后继的链表

    - 线性表的实现
        源码参考:https://www.cnblogs.com/qq188380780/p/7482390.html
原文地址:https://www.cnblogs.com/qq188380780/p/11216493.html