数据结构与算法专题:走近数据结构

Posted 爱凡在线

tags:

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

程序对于今天的我们来说早已不是一个陌生的概念。手机里的APP、电脑上的软件、常玩的游戏都是程序。

1.认识数据

2.数据的存储方式

这些我们认知中的数据,在软件中是以什么样的方式存在的?怎样存储有利于节省空间?如何编排能够确保检索、计算、显示更加快速?

对上述问题的考量,我们需要在程序中为数据设计合适的存储结构来进行数据的编排。这种设计出来的数据存储方式,我们称它们为数据结构。

常见的数据结构有数组、堆栈、链表、树、图、哈希表、散列表等。在接下来的课程里,我们会逐一呈现各个结构的定义、特性、适合应用的场景。在真实的程序设计中,数据结构并不是唯一的,可能是其中某一种,也可以是几种的结合,或者在这些结构的基础上创造出自己特有的结构。但是学好这些最常见的结构,是我们在未来深入使用的基础。

在今天,随着软件开发工具的不断多样化,平台的越来越丰富,很多数据结构的功能已经被相应的开发软件整合在一起,无需开发人员花太多的时间去研究和重写。我们在信息系统开发中会将所有的数据存储在数据库中,例如:ACCESS、MS SQLSERVER、mysql等,下面是一张存储在数据库中的表,它是二维的,有行和列,我们所需要的数据被有序地存储在其中:


如果我们要从这些数据中挑选出所有1990年入职的员工,我们只需要使用下面的指令:
select * from employee
where year(hire_date)=1990

如果我们需要对过滤出来的人员按照姓名的首个字母进行排序,我们只要使用下面的指令:
select * from employee
where year(hire_date)=1990
order by fName 

下图是我们运行上面的指令后,数据库自动帮我们检索出来并进行排序后的结果。

数据结构与算法专题:走近数据结构


我们经常使用EXCEL,用它处理数据的统计核算十分方便,它的功能和上面见到的表单的功能十分类似。

那么,我们是不是就不需要学习数据结构了?当然不是。应用程序对通用的数据存储、计算、过滤等进行了封装,方便我们快速使用,但是面对核心的运算,个性化的处理,依旧需要将数据加载到我们设定好的数据结构里面,进行定制化的处理和运算。这些数据结构通常创建在计算机的内存中,使得计算更加快速高效。反之,如果把数据存储在数据库或其它文件中,我们就需要频繁的将它们从文件中读取到内存中,极大耗用资源,降低速度。

例如:我们要判断下面的九宫格是否符合数独的解题要求。

数据结构与算法专题:走近数据结构


我们可以为它创建二维的表格来存储这些数据,如下图:

我们也可以用有81个字符的字符串来存储这些数据,如: istr="625341798-498672315-371598426-852167934-149835672-736429581-587916243-263784159-914253867"; 


3.算法

在上面的案例中,我们使用了两种数据结构来存储81个数独数字。那么我们如何来判断这81个数字是否符合数独的要求?于是我们就需要编写算法来完成。
以下图为例:


1.我们首先需要判断1-9行,每一行是不是只存在数字1-9,且没有重复的数字出现。
2.接下来我们需要判断1-9列,每一列是不是只存在数字1-9,且没有重复的数字出现。
3.最后,我们还需要判断每个3*3的9个格子中,是不是只存在数字1-9,且没有重复的数字出现。
4.如果以上3种判断,有一个地方出现与条件不符,我们认为当前的81个字符不符合数独要求。
5.否则,数独要求成立。

如果我们把上面的判断过程,用程序语言或者伪程序表示出来,这就是算法。算法是计算机解决一个问题所经过的一连串的步骤。它包含数据的输入、数据的处理、数据的输出。

例如我们要检查幼儿园里的孩子有没有注射问题疫苗,就需要经过一系列的运算:
1.首先将问题疫苗的批次写在黑板上。
2.将孩子的疫苗本一本本的放在桌上,并翻到注射记录的页面。
3.比对第一个孩子的注射记录,是否有问题疫苗的批次出现,如果没有,则安全,放在左边。如果有,则放在右边。
4.比对第二个孩子的注射记录,是否有问题疫苗的批次出现,如果没有,则安全,放在左边。如果有,则放在右边。
5.比对第三个孩子的注射记录,是否有问题疫苗的批次出现,如果没有,则安全,放在左边。如果有,则放在右边。
......
6.到所有孩子的记录比对完毕,那么左边的所有孩子是安全的。右边的所有孩子是注射过问题疫苗的孩子。
7.我们将注射过问题疫苗孩子的姓名,注射时间等信息统一登记到一张纸上。
8.将疫苗本整理归档,上交注射过问题疫苗孩子的名单。
在计算机的世界里,这样的计算操作过程,我们把它称为算法。

无论是哪种算法,都会涉及到对数据的处理。数据以什么样的方式组织存储起来,靠的是数据结构;而如何进行数据的演算,靠得则是数学。在数学逻辑之下,用计算机的解决过程,我们称为算法。后续的课程中,我们会向大家介绍很多经典的算法,了解它们,对未来更为高效的程序设计有着重要的作用,你也可以领略到数学如何在计算机领域中扮演重要的角色。

4.程序设计语言

算法有两种:一种是伪算法,只是用来描述算法的过程,不具备程序运行的能力;一种则是真实的程序,可以通过计算机运行并得出结果。在这里,我们对算法的要求会更高一点,不仅要求具备解决问题的能力,还要求能够动态显示算法的计算过程,及过程中的数据变化。因此就需要运用程序设计语言来进行实现。

在后续的课程中,我们将使用两种程序设计语言,分别是VB和python。VB在可视化编程中因为入门简单、环境搭建便捷、语法干练而深受初学者的喜爱,而且很多直观呈现的效果使用VB来创建,更为高效和简洁;而python的粘性更强,编码效率更高,能够为VB搭建很多VB做不到的功能。因此我们把两者整合在一起来学习,欢迎你的关注。

5.本专题适合的人群

程序设计初学者。我们在设计程序设计专题的时候分为两个步骤来进行:
一、学习程序设计的基本语法和语言逻辑,解决一些数学上的难题,实现程序设计的入门。
二、用程序设计来解决企业真实的管理需求,强化程序设计在行业上的应用。

本专题是你涉及的第一步,不用担心自己没有一点程序设计的基础。其中用到的关于变量、各种语法、函数等专用的概念,我们会在一个个数据结构和算法的实例中进行渗透讲解,力求在解决问题的过程中,直观呈现这些深奥的内容,使上手更容易。

希望我们能够带你走入一个神奇的世界。

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

走近麻省理工学院的神秘科技:大数据分析自动化

linux专题:走近Linux系统 (2020-04-08 10:08)

linux专题:走近Linux系统 (2020-04-08 10:08)

「算法数据结构专题」带你认识常用的限流算法的技术指南

算法专题之bitmap与布隆过滤器 ----如何快速处理海量数据

数据结构与算法__冒泡排序__Java外比较器和内比较器(排序专题)