数据结构和算法

Posted Jeson

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构和算法相关的知识,希望对你有一定的参考价值。

- 线性表
    - 定义: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

 

以上是关于数据结构和算法的主要内容,如果未能解决你的问题,请参考以下文章

以下代码片段的算法复杂度

可以解密加密数据的片段吗?

从搜索文档中查找最小片段的算法?

如何标记从卷积神经网络的分割算法生成的图像片段?

伪代码

C语言100个经典算法源码片段