数据结构和算法(一)

论坛 期权论坛 脚本     
已经匿名di用户   2022-7-2 21:58   1146   0

本 节 主 要 介 绍【数据结构】学 习 中 的 一 些 基 本 知 识

什么是数据结构?

设想一下,假如把你的身份证、校园卡、钥匙等看作数据,那么数据结构就可以看成是你的这些物品的摆放方式和存储形式。把数据结构的概念放到计算机上面来,数据结构就是数据的一种存储和组织方式。我们常说【数据结构】+【算法】=【程序】 ,那么算法就是获取数据求解问题的一段指令(代码或序列集合)。

为什么要学数据结构?

数据结构是多数高校计算机专业的必修课程,还是计算机考研的必考科目之一。作为一个软件开发者,想要开发出更高效的软件,对软件进行优化,数据机构的学习也必不可少。程序设计的实质是对实际问题设计/选择好的数据结构和好的算法,而好的算法在很大程度上取决于描述实际问题的数据结构。简单来说,学习数据结构能让你编写的代码更加规范,简洁,减少耦合度!

怎么学好数据结构?

一、数据结构形象化

关于数据结构有很多经典的书籍,比如《算法 第四版》、《数据结构与算法》等,其实学校发的教科书也绰绰有余了。学习数据结构靠背代码肯定是行不通的,最重要的是你要记住这种算法思想,也就是这个数据结构的特性.它是如何在计算机内存中储存的,当要向这种数据机构中插入数据、删除数据或更新数据等一系列操作时,它又是如何运作的。把这种数据结构画出来,一步一步地去分析,更有助于我们理解数据结构。比如说,在数据结构中的“栈”,它是一种限定仅在表尾进行插入和删除操作的线性表,也就是我们所说的“先进先出”:

(提示一下,这也是后续我们数据结构系列中向大家讲解数据结构的一种主要方式之一)

二、多练习多思考

这个肯定不用多说了吧,平时我们通常通过代码来完成一种数据结构,但是究其根本它也是一种很虚的东西,当然生活中也不乏某些数据结构的体现。比如说,我们在排队时总是在队尾开始排(当然我们理想一点,假设没有插队),队头买到东西后离开,我们就能向前前进一步,这就体现了数据结构中“队列”的思想:

我们在编码过程中,如何真正地解决问题,以及运用一些编程技巧去实现,体现了一位程序猿的编程素养,对数据结构的应用也是极为重要的。当然啦,在现阶段我们的水平还没有那么高,因此我们可以通过不断地编码去实现它,让它的一些特性或特征在你的脑海中形成“永久记忆”。刚开始编码的时候肯定会有很多问题或困难。可是,把这些东西解决了,我们也就能记住了。

数据结构先导知识

这一小节介绍的是在学习数据结构时常需要用到的知识,如“大O表示法”、数据的逻辑结构和数据的存储结构,其他的一些概念性比较强的(数据项、数据元素等)不作介绍。

一、数据的逻辑结构

数据元素和数据元素间的逻辑关系构成数据的逻辑结构。

数据的逻辑结构总的来说可以分成三大类:线性结构、树结构与和图结构,其中树结构和图结构也可以称为非线性结构。

二、数据的存储结构

数据结构在计算机中的表示,称为数据的物理结构,也称为存储结构。数据的存储结构可分为顺序存储结构和链式存储结构。

一个顺序存储结构在计算机内存中的表示是连续的,比如我们学习的数组,就是一个顺序存储结构。而链式存储结构在计算机内存中的表示不一定是连续的,那计算机是怎么来寻找下一个节点的呢?只需要在上一个节点作下一个节点的标记(如下一个节点的内存地址),就能寻找到下一个节点。

显然,链式存储结构就显得比较灵活了,数据出处在哪里并不重要,只需要指针存放了相应的地址就能找到它。

三、抽象数据类型(ADT)

数据类型是指一组性质相同的值的集合以及定义在该集合上的一些操作。

在c语言中,数据类型可以分为两类:

  • 原子类型:即基本数据类型,如整型(int)、字符型(char)等

  • 结构类型:由若干个原子类型组合而成,比如说整型数组

我们对原有的数据类型进行抽象,就产生了抽象数据类型。抽象数据类型是指一个数学模型及定义在该模型上的一系列操作。抽象数据类型的定义仅仅取决于它的一组逻辑特性,而与它在计算机中的表示和实现无关。

例如,int类型的数据表示的是整数,可以进行加减乘除模等一些运算,但是int类型数据的这些数学特性保持不变,那么在编程者来看,他们都是相同的。举个例子:

对于一个虚数,我们可以表示为:(e1+e2i)

e1、e2 是实数,构建抽象数据类型为:

通过这个示例我们可以看出,抽象数据类型就是在这种形式化的描述下把数据的组成和如何操作的问题描述清楚,且没有涉及到具体的计算机具体实现的一些问题。当我们有了一个抽象模型后,就可以针对它进行高级程序语言设计了。

当分析一个复杂的问题,如果直接考虑具体实现和存储的话,这只会让问题更加困难和复杂,我们会认为这是个很难的问题。即便是勉强做到了,但也有可能会对程序后期造成安全隐患。如果我们按照上面这种方式先进行抽象数据类型,然后再考虑具体实现的话,这显然有利于我们分析并解决问题。

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:81
帖子:4969
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP