zoukankan      html  css  js  c++  java
  • 『嗨威说』数据结构

     本文内容:

    1. 本章内容的小结
    2. 完成作业或实践时解决困难的经验分享
    3. 参考资料、说明推荐理由及列出相关链接(或书目名称,具体页码)
    4. 目前学习过程中存在的困难,待解决或待改进的问题
    5. 接下来的目标

    一、本章内容小结:

      (1)顺序表

        顺序表一般表现为数组,使用一组地址连续的存储单元依次存储数据元素

        (1)长度固定,必须在分配内存之前确定数组的长度,当然你可以使用vector容器来实现动态存储。

        (2)存储空间连续,即允许元素的随机访问。

        (3)存储密度大,内存中存储的全部是数据元素。

        (4)要访问特定元素,可以使用索引访问,时间复杂度为O(1).

        (5)要想在顺序表中插入或删除一个元素,都涉及到之后所有元素的移动,因此时间复杂度为O(n).

        注解:每次扩容的时候,都需要将旧的数据全部复制一份,会影响效率。不过实际上使用顺序表比链表的效率高

      (2)链表

        表中的每个节点都保存有指向下一个节点的指针,所有节点串成一条链。根据指针的不同,还有单链表、双链表和循环链表的区分。

    wKiom1bvqaegxZKAAAAY4Ot5Ges352.png

        单链表是只包含指向下一个节点的指针,只能单向遍历。

        双链表即包含指向下一个节点的指针,也包含指向前一个节点的指针,因此可以双向遍历。

        由于链表是使用指针将节点连起来,因此无需使用连续的空间,它具有以下特点:

        (1)长度不固定,可以任意增删。

        (2)存储空间不连续,数据元素之间使用指针相连,每个数据元素只能访问周围的一个元素(根据单链表还是双链表有所不同)。

        (3)存储密度小,因为每个数据元素,都需要额外存储一个指向下一元素的指针(双链表则需要两个指针)。

        (4)要访问特定元素,只能从链表头开始,遍历到该元素,时间复杂度为O(n) 。

        (5)在特定的数据元素之后插入或删除元素,不涉及到其他元素的移动,因此时间复杂度为O(1)。

        (6)双链表还允许在特定的数据元素之前插入或删除元素。

        注解:链表的耗时大约是顺序表的 4倍左右。因为数组只需要很少的几次大块内存分配,而链表则需要很多次小块内存分配,内存分配操作相对是比较慢的,因而大大拖慢了链表的速度。这也是为什么会出现内存池。

     

    二、完成作业或实践时解决困难的经验分享

       推荐在博客园上关注一些技术大牛博主,游览他们的博文进行自学提升自我价值,多多百度或谷歌,可以在公众号上关注一些不错的技术分享者。

    三、参考资料、说明推荐理由及列出相关链接(或书目名称,具体页码):

      推荐大佬博客:

        https://www.cnblogs.com/Roni-i/

        https://www.cnblogs.com/AlvinZH/category/993446.html

    四、目前学习过程中存在的困难,待解决或待改进的问题

      担任多重职位、多个社团、多个兼职,在平衡自己的课外时间和学习时间上存在问题,需要不断调整自我发展情况,退出一些已对自己无提升价值的社团。

      关于课内的困难:这个学期的课本上的代码又很多都是伪代码,希望老师能够拿一种具体语言来操作加深我们对概念的理解。

    五、接下来的目标:

      (1)准备三月底的程序设计天梯赛,学习各类算法

      (2)初步入门自然语言模型建立,帮助树蛙项目组完成数据流、模型的搭建。

      (3)深入学习后期特效技术

  • 相关阅读:
    再谈加密-RSA非对称加密的理解和使用
    WEB开发中的字符集和编码
    网页实时聊天之PHP实现websocket
    PHP中的回调函数和匿名函数
    shell实现SSH自动登陆
    初探PHP多进程
    PHP的openssl加密扩展使用小结
    搭建自己的PHP框架心得(三)
    docker 快速搭建Nexus3
    用图形数据库Neo4j 设计权限模块
  • 原文地址:https://www.cnblogs.com/WinniyGD/p/10548021.html
Copyright © 2011-2022 走看看