数据结构(26-27-1)

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

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

学时安排:48学时

学分:2分

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

    累计页面浏览量

  • 1076

    累计选课人数

  • 3347

    累计互动次数

08-31 15:41 李群 山东航空学院 在数据结构(26-27-1)课程中提问:

在线性表中查找数据可以有多快?

如果有一线性表,我们要在其中查找一个与给定值相同的元素,时间复杂度是多少?你认为最快能有多快呢?

  • 11-14 16:39 任宪壮

    线性查找时间复杂度为O(n),最快为O(n
  • 查看全部(136条)

08-31 15:41 李群 山东航空学院 在数据结构(26-27-1)课程中提问:

在C/C++语言里有没有办法不用指针做出链表呢?

  • 11-13 14:26 王树昂

    C 语言:用结构体数组 + 整数下标实现静态链表;
    · C++:可以用数组 / std::vector + 下标实现,也可以用 std::list 等容器隐藏指针;
    · 引用不能替代链表中的指针;
  • 查看全部(32条)

08-31 15:41 李群 山东航空学院 在数据结构(26-27-1)课程中提问:

顺序表or链表

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

  • 11-13 14:25 王树昂

    顺序表在“读多写少、随机访问多”时强;链表在“写多、位置已知、动态性强”时强。脱离场景谈强弱没有意义。
  • 查看全部(31条)

08-31 20:36 李群 山东航空学院 在数据结构(26-27-1)课程中提问:

哈夫曼算法是否是贪心算法?

哈夫曼算法是否属于贪心算法,如果是,它的贪心策略是如何实施的?

  • 11-13 14:16 王树昂

    是的,哈夫曼算法属于贪心算法。它每一步都做出当前看来最优的选择,并且不回溯,最终得到带权路径长度 WPL 最小的哈夫曼树,从而构造最优前缀编码。
  • 查看全部(7条)

08-31 20:36 李群 山东航空学院 在数据结构(26-27-1)课程中提问:

设计算法输出二叉树某层上的所有结点

试思考,如何设计算法实现输出一棵二叉树某层上的所有结点的值。

  • 11-13 14:16 王树昂

    关键点

    1. 明确层号定义:根是第 1 层还是第 0 层。
    2. DFS 中当前层等于目标层时收集并停止向下递归。
    3. BFS 中逐层处理,到达目标层直接返回该层所有结点。
    4. 空树、目标层小于 1、目标层超过树高时,应返回空列表。
  • 查看全部(7条)

08-31 20:36 李群 山东航空学院 在数据结构(26-27-1)课程中提问:

如何打印二叉树中所有的路径?

从根结点到叶子结点的点的集合称之为该叶子结点的路径。请思考,如何设计算法,能打印一棵二叉树中的所有路径?

  • 11-13 14:15 王树昂

    打印二叉树中所有“根结点到叶子结点”的路径,最自然的方法是 深度优先遍历 DFS + 回溯:遍历时维护一条从根到当前结点的路径,遇到叶子结点就输出;返回父结点时把当前结点从路径中删除。
  • 查看全部(9条)

08-31 14:49 李群 山东航空学院 在数据结构(26-27-1)课程中提问:

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

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

  • 11-12 20:11 孟依凡

    我想分享**冒泡排序**。冒泡排序是简单的交换排序算法,思路是反复遍历数组,依次比较相邻两个元素,如果顺序不对就交换,每一轮都会把最大的元素 “冒泡” 到末尾。
    它的优点是逻辑简单、代码好写,适合小规模数据;缺点是时间复杂度是\(O(n^2)\),数据量大的时候效率很低,一般只用来入门学习。之前写数组排序题的时候我用过这个算法,也对比过它和选择排序的区别。
  • 查看全部(12条)

08-31 14:49 李群 山东航空学院 在数据结构(26-27-1)课程中提问:

何为优秀的程序?

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

  • 11-12 20:11 孟依凡

    1. 正确性:能够准确实现需求,各类测试用例都可以得到正确结果,没有 bug。
    2. 高效性:时间复杂度、空间复杂度合理,运行速度快,不浪费内存资源。
    3. 可读性:代码排版规范、命名清晰,加上必要注释,别人容易看懂。
    4. 健壮性:可以处理异常输入、边界情况,不容易崩溃。
    5. 可维护性:结构清晰、模块化,后续修改、拓展功能方便。
  • 查看全部(12条)

08-31 14:49 李群 山东航空学院 在数据结构(26-27-1)课程中提问:

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

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

  • 11-12 20:10 孟依凡

    第一,夯实基础,理解算法复杂度。写代码前先分析时间、空间复杂度,学会对比多种方案,根据场景选择合适算法,而不是只满足跑通程序。
    第二,坚持多动手实践。同一道题目尝试多种解法,像刚才的去重统计题,分别用暴力法、排序法、哈希法实现,对比不同思路的优劣,加深理解。
    第三,学会复盘总结。做完题目之后梳理思路,记录易错点,理解算法背后的逻辑,而不是死记代码。
    第四,积极交流讨论。和同学一起分析题目思路,了解别人的想法,拓宽自己的思维,慢慢养成优化代码、追求高效的习惯。
  • 查看全部(12条)

08-31 14:49 李群 山东航空学院 在数据结构(26-27-1)课程中提问:

有多少个不同值?

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

  • 11-12 20:09 孟依凡

    1. 暴力二重遍历法
    逐个拿元素和前面所有元素比对,第一次出现就计数。
    时间复杂度 \(O(n^2)\)。
    优点:逻辑最简单,不用改动原数组、不用额外复杂结构;
    缺点:效率很低,数组一大就很慢,只适合小规模数据。
    2. 先排序,再相邻去重统计
    先把数组排序,相同数字会挨在一起;遍历的时候只需要和前一个元素对比,不一样就计数加一。
    时间复杂度 \(O(n\log n)\)。
    优点:不需要额外大量空间,效率比暴力好很多,是数据结构作业里最常用的折中方案;
    缺点:排序会改变原来数组顺序。
    3. 哈希集合(散列表)方案,效率最高
    遍历数组,把元素放进哈希集合,集合自动不存重复元素,最后集合大小就是不同元素数量。**平均时间复杂度 \(O(n)\),是三种里面最高效的
    优点:一趟遍历就能完成,速度最快;
    缺点:需要额外开辟存储空间存放哈希表,C 语言没有自带集合,写起来麻烦一点。
  • 查看全部(14条)

常见问题

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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