郝斌数据结构笔记02:数据结构概述

欢迎关注我的个人公众号【程序员向东】,该公众号专注分享Python、爬虫学习资料与干货!后台回复「PYTHON」,送你一个学习大礼包!

想要下载【郝斌数据结构笔记全系列】可以到我的GitHub,连接是:https://github.com/mxdshr/LearningNotes ,如果觉得有用,欢迎给个star~

数据结构概述

严蔚敏的《数据结构》上是伪代码,高一凡将其用C和Java实现了。

1. 数据结构的定义

我们如何把现实生活中大量而复杂的问题以特定的数据类型(个体如何保存)和特定的存储结构(个体之间的关系),保存到主存储器(内存)中,以及在此基础上为实现某个功能(比如查找某个元素,删除某个元素,对所有元素进行排序)而执行的相应操作,这个相应的操作也叫算法。

前面一段的前半部分可以理解为数据结构要学的内容,也就是数据如何存储的内容;后半部分可以理解为算法要学习的内容,也就是如何进行操作的问题。

数据结构 = 个体 + 个体的关系

算法 = 对存储数据的操作

假设我们要保存一个班级学生的信息,如果这个班级一共有15个人,那么直接存到数组中就可以了。但是如果这个班有10000个人,那么用数组就不太可行了,因为数组是连续的存储结构,如果内存无法提供存储10000个数据的连续空间那么就无法用数组来解决了。此时,我们可以用链表来解决,因为链表可以充分利用闲散的,不连续的存储空间。那这些不连续的空间之间可以用指针联系到一起。

学生之间没有什么上下级关系,用链表存储是可行的,但是现在要求你存储某市的人口信息或某个公司的职员信息,用链表也不行了,因为一个家庭之间的人口有父母孩子之分,兄弟姐妹之分。一个公司也有上下级之分。这个时候应该用树结构来完成。用树可以做一个人事管理系统吧。

现在需求又升级了,我们现在要存储的是一个城市的交通图,该城市有很多的公交站点,当我们要求从一个站点到另一个站点的最短距离的时候,用数组解决不了,用链表解决不了,用树也解决不了。只能用图来解决。图中的每一个节点都有可能与另外一个节点产生联系。

通过上面的例子我们发现,当我们需要用计算机去解决现实生活中的某些问题的时候,首先要解决的就是如何用计算机合理的存储数据。数据无法合理存储,就不用再谈操作的问题。其次要解决的就是如何解决数据与数据之间的关系问题。总结来说就是

  • 个体如何来存储
  • 个体与个体的关系如何来存储

2. 算法

  • 算法又分为一个广义算法和狭义算法。从广义来讲,算法跟数据的存储是没有关系的,从狭义上来讲,数据的存储方式不一样,算法所执行的操作也是不一样的。我们讲的是狭义的算法,泛型讲的是广义的算法。

  • 他是解题的方法和步骤。

  • 衡量算法的标准:

    • 时间复杂度(程序最关键步骤大概要执行的次数,而非时间,因为时间跟机器的性能有直接关系。)
    • 空间复杂度(算法执行过程中大概所占用的最大内存)
    • 难易程度(大家要能理解)
    • 健壮性(不能随便就挂了)

    搞研究的时候最重要的是时间复杂度和空间复杂度,要应用到程序中的时候最重要的是难易程度

3. 数据结构的地位

数据结构是计算机中的核心课程。

我们在很多的编程语言都能找到数据结构的影子,无论是C还是JAVA,语言里面都有一些基本的东西,讲到内存的时候就有栈、堆。栈和堆并不是指计算机内存中有一块区域叫栈或堆,所谓的栈内存和堆内存指的是分配内存的算法不一样,如果是压栈出栈的方式分配内存,就叫栈内存。如果叫堆排序的方式分配内存,那就是堆内存。实际上讲的是算法,还是数据结构的内容。另外还有函数的调用,要想知道调用函数的真正原理,就需要学栈,它是靠压栈和出栈来实现的。

在操作系统中一定要懂得队列的知识,因为牵扯到跟时间有关的东西总要有个顺序,这就涉及到了队列的知识。学编译原理就要学树。数据库是数据结构的简化版。

程序 = 数据的存储 + 数据的操作 + 编程语言

我们之所以在编程的时候没有直接涉及到数据存储的问题,是因为编程语言底层已经帮你解决了。

数据结构很重要,但学完之后做不出来什么东西,他是内功。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值