数据结构

主讲教师: 李群 副教授 / 山东航空学院

教学进度:
  • 预报名
  • 进行中
  • 已结束

学时安排:80学时

学分:2分

数据结构是计算机科学与技术专业及其相近专业的学科基础课程,系统讲授数据结构概念、原理和应用,是解决复杂工程问题的重要基础。它所讨论的知识内容和提倡的方法,无论对进一步学习计算机领域的其它课程,还是对从事大型信息工程甚至操作系统的开发,都是非常重要的基础和保障,通过本课程的学习有助于提升学习者的算...
  • 1213347

    累计页面浏览量

  • 970

    累计选课人数

  • 5456

    累计互动次数

03-04 17:33 李群 山东航空学院 在数据结构课程中提问:

何为优秀的程序?

你认为什么样的程序称得上优秀,有哪些评判标准?

  • 06-27 13:16 翟纪行

    优秀程序首先保证正确稳定,其次兼顾高效、易读易维护,同时支持后续迭代拓展,兼顾运行性能与长期开发成本。
  • 查看全部(48条)

03-09 19:35 李群 山东航空学院 在数据结构课程中提问:

你用过哈希表吗?

在实际问题解决中,你是否使用过哈希方法?如果你用过java、C++,你了解里面的哈希表实例吗?

  • 06-27 13:03 铁振泽

    实际开发中经常使用哈希结构: 1. Java: HashMap 、 HashSet ,底层数组+链表/红黑树,基于哈希实现。2. C++: unordered_map 、 unordered_set ,原生哈希表,查询增删效率高。常用于去重、缓存、键值快速映射等场景。
  • 查看全部(52条)

03-04 17:33 李群 山东航空学院 在数据结构课程中提问:

有多少个不同值?

编写算法,求一个整型数组中有多少个不同值。如:数组{5,3,5,2,6,1,7,3,5},不同的值有6个。你有什么办法解决该问题,能不能找到比较高效的算法?

  • 06-27 12:58 翟纪行

    暴力双重循环(基础低效)思路遍历每个元素,再往前遍历判断是否重复,不重复则计数 + 1。复杂度时间\(O(n^2)\),空间\(O(1)\);数据量大时速度极慢,仅适合极小数组。先排序再单次遍历(中等效率)思路先用快排 / 归并排序将数组升序,相邻元素对比,相邻不同则计数。复杂度排序\(O(n\log n)\),遍历\(O(n)\),总\(O(n\log n)\);空间取决于排序是否原地。
  • 查看全部(52条)

03-04 17:33 李群 山东航空学院 在数据结构课程中提问:

说说你在编程中使用过的或者了解的一些算法

有很多经典算法,就像计算机科学里的颗颗明珠,相信大家在学习和使用程序设计语言时已经有所应用。你使用过哪些算法或者了解哪些,跟大家一起分享一下。

  • 06-27 12:56 翟纪行

    顺序查找:无序线性表通用,逐个遍历比对,刷题、简单数据检索经常用到,复杂度(O(n))。
    二分查找:仅适用于有序顺序表,每次折半缩小范围,复杂度(O(log n)),成绩查找、数字猜谜程序都用过。
    哈希查找:借助哈希表映射,理想情况(O(1)),用 Java HashMap、C++ unordered_map 统计单词频次、去重。
  • 查看全部(51条)

03-04 17:33 李群 山东航空学院 在数据结构课程中提问:

怎样修炼自己的编程能力?

通过本章的学习,结合你的编程学习之路,谈谈你是怎样或者打算怎样提高自己的编程能力。

  • 06-27 12:54 翟纪行

    编程能力不是靠背诵语法提升,而是理论打底、大量手写实操、持续复盘、项目落地循序渐进的过程。本章数据结构的学习让我明白,优秀的代码不只是能运行,更要高效、合理,后续我会围绕这几点持续打磨自己的编程水平。
  • 查看全部(54条)

03-09 11:37 李群 山东航空学院 在数据结构课程中提问:

广义表与线性表本质区别

从逻辑结构角度阐述广义表与线性表的本质区别,并说明这种差异对存储实现的影响。

  • 06-27 12:39 铁振泽

    普通线性表的元素只能是不可拆分的原子类型,所有元素位于同一层级,属于线性结构,仅具备长度这一属性;广义表的元素既可以是原子,也可以是嵌套的子广义表,存在多层级的嵌套关系,属于非线性结构,除长度外还有深度属性,同时支持递归定义与子表共享。线性表既可以采用顺序存储,也可以采用结构统一的链式存储,能够实现随机访问,内存排布规整;广义表由于元素类型不统一,需要在结点中设置标记位来区分原子结点与子表结点,只能通过链式方式存储,无法使用顺序存储结构,不能随机访问,但可以通过指针实现子表共享,能够存储树形、图形这类复杂的数据结构。
  • 查看全部(179条)

03-09 11:37 李群 山东航空学院 在数据结构课程中提问:

广义表还是表?

通过学习,你觉得广义表是不是普通意义的线性表,它具备哪些特殊性质?

  • 06-27 12:39 铁振泽

    广义表不属于普通线性表,是线性表的拓展延伸。特殊性质:元素既可单独数据原子,也能嵌套子表;具备递归特性,广义表自身可作为自身元素;只有全部元素都是原子时,广义表才退化成普通线性表。
  • 查看全部(80条)

03-09 11:37 李群 山东航空学院 在数据结构课程中提问:

怎样存储高维矩阵才能节省空间?

在许多科学计算中,会用到高维矩阵,在计算机内存储它们时如何能有效节省空间,你有什么方法?

  • 06-27 12:39 铁振泽

    对于含大量 0 元素的高维稀疏矩阵,采用三元组、十字链表、CSR 等格式,仅存储非零元素及其位置信息,不再存储无效的零元素,大幅节省内存。对称矩阵、三角矩阵、带状矩阵等具有规律结构的矩阵,利用矩阵自身的数值对称性、区域性,只存储不重复的有效区域元素,剔除重复或固定常量部分的冗余存储。在精度允许下选用占用字节更少的数据类型存储元素;超大高维矩阵采用分块存储,仅将当前计算所需的数据块调入内存,其余数据存放于外存,降低内存占用。对矩阵二进制数据采用 LZ4 等无损压缩算法存储,离线场景下可极大缩减磁盘存储空间。
  • 查看全部(78条)

03-08 19:07 李群 山东航空学院 在数据结构课程中提问:

高级语言中的栈、队列

如果你了解一些面向对象语言,比如java、C++、python,那你能说说这些语言中的栈、队列如何使用吗?

  • 06-27 12:34 铁振泽

    Java
    栈:优先使用 ArrayDeque , push() 入栈、 pop() 出栈、 peek() 查看栈顶;老旧 Stack 类性能较差,新项目不推荐。
    队列:基于 Queue 接口,用 LinkedList 实现, offer() 入队、 poll() 出队,适合任务排队场景。
    C++
    栈:STL容器 stack , push() 压入、 top() 取栈顶、 pop() 弹出元素。
    队列:STL容器 queue , push() 尾部入队, front() 读取队首, pop() 完成出队操作。
    Python
    栈:直接使用列表 list , append() 尾部入栈, pop() 尾部出栈,使用便捷。
    队列:使用 collections.deque , append() 入队、 popleft() 出队,规避列表头部删除数据的低效问题。
  • 查看全部(46条)

03-08 18:47 李群 山东航空学院 在数据结构课程中提问:

顺序表or链表

顺序表和链表到底孰强孰弱,你是如何看待这个问题的?

  • 06-27 12:34 翟纪行

    若业务多读少改、需要随机访问、数据量稳定,顺序表更强;
    若业务频繁中间插入删除、数据长度不确定、几乎不按下标查询,链表更强;
    工程中会折中选择:如 Java ArrayList(顺序表)、LinkedList(链表)分别适配读写两种需求,不存在万能的 “更强” 结构。
  • 查看全部(99条)

常见问题

  • 1.我该如何学习这门课程?

    (1)首先您要注册一个学银在线的账号。

    (2)您需要有一定的上网条件,能够流畅的观看教学视频。在观看的过程中,您可以选择在PC端登陆我们的网页, 也可以选择下载我们的app学习通,通过手机客户端来学习。

    (3)您一旦报名选择了课程,我们的课程主讲老师或课程团队会通过通知的形式给您发送课程有关的消息,同时会抄送您的邮箱,请您及时查收。

  • 2.我在学习过程中遇到问题了,怎么办?

    您可以通过以下几种方式获取帮助:

    (1)在课程群聊中发布求助信息,说不定和你一起学习这门课的小伙伴就能够解决你的问题呢;

    (2)在课程讨论区留言,课程团队看到后将会及时回复。

    (3)联系我们的客服,或者随时给我们发邮件,邮箱地址:xueyinkf@chaoxing.com。

  • 3.我是新手,能否给我一些学习建议?

    (1)我们的课程采用MOOC的方式授课,因此您可以自由安排您的学习时间、学习地点。但我们仍旧希望您每周能都有固定的时间持续进行本课程的学习,根据人的记忆曲线显示这种规律的学习方式能够最大限度的提升您的学习质量。

    (2)学习的过程比较容易,为了检验您的学习成果,我们的课程团队会在课程章节结束后布置测验或作业,希望您尽可能的按时独立完成。如果有没有掌握的知识点,您可以继续回看复习课程。

    (3)希望您能够积极参与课程的讨论,与各位学习者一起煮酒论英雄。在讨论的过程中,不光可以对课程所学内容温习内化,还能互相碰撞出思想的火花,相信您一定会有额外的收获。

  • 4.课程会不会很难、很枯燥?

    (1)我们的课程都是老师经过精心设计拍摄制作而成,并且由于是MOOC的方式,所以课程拆分成了不同的知识点,学习起来一点也不费劲。

    (2)我们的课程多采取理论结合实际的授课方式,课程中也有许多案例的呈现,相信会给学习者带来诸多方面的启发。我们也将力求做到深入浅出,支持学习者将研究发现转化为实践,改进自身教学。