#引言
实习没什么活,之前无聊的时候看看代码。现在代码看不进去了,其实也差不多了,有些代码真正改的时候才能真正的领悟。想想大学时数据结构因为某些原因吧,没学好,而数据结构还特别重要,出去面试大公司,基本都会问到。于是看代码闲暇的时候恶补数据结构。此系列博客根据网上资料+学校ppt+。。。。。。网络资料
其实网上资料就好多了,然后整理一下子而已,自己要是不写个笔记让人看的话,自己的学习就像没监督一样。你看,我写了博客,让大家看到了,要是哪天我突然不写了,就说明我懈怠了,那我多丢脸啊,是吧。
今天这篇博客主要讲的是数据结构的一些概念,定义而已,像什么链表、栈和队列、树、图等等,在以后的博客讲。
此篇博客推荐人群:
##为啥要学数据结构啊?
这个学科目的的意思就是说,数据结构是算法的基础,数据结构就是为了算法而存在的,数据结构是为了算法服务的。你说你特别聪明,各种算法都能做出来,但是数据结构却不会,哪个面试官信你啊?现在的面试官呐。。。
##绪论
###啥是数据结构
说道数据结构,我们就要看看计算机出现的意义了,为啥出现了计算机?
那是因为由人类解决问题过慢,所以出现了计算机,那么我们怎么用计算机解决问题的呢?
我们ppt上是这么写的:
问题—>(分析)—>(数学)模型—>(技巧)—>算法—>(语言)—>程序—>调试、运行
在我呆着满心欢喜以及对数据结构高度好奇的看ppt的时候,看到这里很懵逼的:什么鬼啊,神经病啊。
其实这里的(数学)模型,就是数据结构!知识当时我不明白而已。
用白话把这学术话翻译过来。是这样的
1、出现问题,我们就要分析。2、分析之后设计解决问题的算法。3、在设计算法中有些东西需要我们去将其独立起来,看做一个整体。4、还要搞清这个整体与整体之间的关系,搞清楚整体内部各元素之间的关系。
5、写程序,开车
上面说的这些整体,以及这些关系(整体与整体之间,整体内部元素之间),就是数据结构。
而3和4就是数学建模。我猜的,不管你信不信,我是信了。
一位伟大的教授-N.我死(Niklaus Wirth), 曾提出:
Algorithm + Data Structures = Programs
算法+数据结构=程序
先不管这教授是哪个孙子,这句话说的还是不错的。
概括的说,数据结构的学科是什么?官方的概念是这样的:
数据结构是一门研究非数值计算的程序设计问题中计算机的操作对象以及它们之间的关系和操作等的学科
我们看不懂可以忽略,学术,就是所谓的不说人话然后还让学生去背这晦涩难懂的概念然后还考试然后考不过还不让毕业。
我告诉你,数据结构就是
1、为算法服务的,数学模型。2、元素与元素关系的集合。
###数据结构基本概念和术语
1、数据:是对客观事务的符号表示,在计算机科学中是指所有能输入到计算机中并被计算机程序处理的符号的总称。
举个糖炒栗子:
1)、数值数据:12334,String,“数据结构老师教的不好”,等等这些都是数值数据,也就是数据。
2)、非数值数据:声音:忐忑.mp3,图像:某结衣.jpg,视频:你们懂.avi
2、数据元素:是数据的基本单位,在计算机程序中通常作为一个整体进行考虑和处理。
数据项:多个数据项可组成一个数据元素,数据项是数据的不可分割的最小单位。
举个官方大栗子:
拿死宅程序员最熟悉的东西来举个大众栗子:
一套片片的专辑是关于片片的数据,
每一个片片是专辑的一个数据元素,
片片的片名、主演、时长等信息是一个数据项。
话糙理不糙哈。
3、数据对象:
是性质相同的数据元素的集合,是数据的一个子集。
例如上表的某几个数据元素的集合。也就是说,上面专辑中,随便拿出几个片片,做成新的专辑,这些片片性质都相同,都有片名、主演、时长等信息。
4、数据结构:
是相互之间存在一种或多种特定关系的数据元素的集合。
这个概念是数据结构在计算机领域中的概念,上面有个数据结构的概念是数据结构学科的概念。后面还会有一个数据结构的概念,那到时候再解释。其实老师挺天猫shark beach的,一个数据结构搞这么多概念?
什么鬼啊?神经病啊?
这个概念挺简单的,还是拿上面的表做栗子。
伪代码:
//首先定义集合A
define A{};
//定义关系B
define B;
//定义数据结构的概念
define DataStruct;
//将上表整体看做集合A
A=上表;
//将上表学号的大小次序看做关系B。
GuanXi B(){//原谅我直接用拼音了
学号次序,即学号大小关系。
}
//当初我这里就不明白,其实很简单,张三的学号小于李四的学号,张三和李四的关//系就是:“张三的学号小于李四的学号”关系。
//然后集合A和关系B统称数据结构。
DataStruct=(A,B);
伪代码就是帮助理解说明的瞎勾B写的玩意。
由以上伪代码的例子,又得出数据结构的定义:数据结构本质:
数据结构是相互之间存在着某种逻辑关系的数据元素的集合。
根据我们的PPT,数据结构一共有三个概念,
有必要吗?搞出三个概念?所以说我们数据结构老师确实_________________。
说他坏话不太好,毕竟这个老师挺单纯的,人还不错。所以这是个填空题,大家自行脑补。
解释一下,第一个概念是数据结构学科的概念,第二个概念才是真正的概念,第三个概念是数据结构本质是什么。
而且我们的ppt还举了N个例子,每一个概念举一不同的来说明,有必要吗?有些人连例子都不明白,更何况概念了。而且例子多,容易让人分心,没有耐性听下去了。
所谓的学术,就是不说人话,净搞繁杂冗余的概念,然后让学生背,还说这是前人总结的精辟,然后还考试,然后考不过还不让毕业,现在的大学啊。。。
这是几十年根深蒂固的中国式教育搞的事情。无法根除,而且说这个也跑题了,跑的还很大。不过还是要在文末吐槽一下,中国的教育啊。。。
###抽象数据类型的表示与实现
首先,什么是数据类型:
数据类型 是一个 值的集合
和定义在此集合上的 一组操作
的总称。
和数据结构的概念差不多,但不一样。看后面的栗子就明白了。
像java提供的基本数据类型,int long 等等。。。
什么是抽闲数据类型:
(Abstract Data Type 简称ADT)
是指一个数学模型以及定义在此数学模型上的一组操作。
这个ADT可不是Android入门时候搭建环境变量的ADT。就像我小弟叫许文强,但是和上海滩那个根本就不是一个人。只是名字一样而已。那个叫Android Develop Tools,我猜的,不管你信不信,反正我信了。
举个抽象数据类型的栗子:
ADT{
数据对象:A
数据关系:B
基本操作: 方法1:取出一个数据元素;方法2:两个数据元素相加;方法等等。。。
}
抽象数据类型的描述方法
抽象数据类型可用(D,S,P)三元组表示
其中,D 是数据对象,
S 是 D 上的关系集,
P 是对 D 的基本操作集。
和数据机构多了一个操作的集合。惊不惊喜?意不意外?
###算法和算法分析
一个大写的
#略
这个要再开一篇博客了,挺多的,涉及到
OK其实还有一个存储结构的概念,这里没讲,这个应该在链表哪里引出比较好。所以在讲链表的时候再说。
#PS吐槽大会:
吐槽中国式教育。现在的老师啊。。。
高中的时候,在我们县第一高级中学。当时还没有合并其他高高中,真是黑龙江倒数第一高中。而有之一,要是校长看到了这篇博客,可以来找我,没问题的。
大家上网搜索依兰高中老师骂学生要礼物等等词汇,有福利哦。
其实大多数老师还是很好的,只是个别教的差而已,而我家庭条件还不允许我去外地念书。悲剧。
记得高中的时候,我们新生物老师,从初中刚上位的,教的那个垃圾,误人子弟啊。有些知识自己根本不会。比如说:有些题的选项的解释明明因为条件case1原因而得出的结论。她讲题的时候,非要说成由于不相关的case2的原因得出的结论。mdzz。
关键是这些知识像我这样的学生才知道他讲错了。有些学生根本不知道,以为事实就是她讲的那样,真是误人子弟误人子弟。我们向学校反应,居然得到的官方回应是这样的:
你牛奔你怎么不出去念书?
哈哈哈哈
因为这个生物老师误人子弟,这个老师教的其他班的班任就提出,找学生代表去和校长沟通。于是我和邻班班长一起去找校长。
这是别的班级的班任,为了自己学生的前途着想,提出的方法。而我班班任,身兼政教处副主任,那段时间说是要升职为副校长。将我们大骂一顿。就为了卖那个老师面子哈哈,原谅我不懂权力的世界。(还有一次贫困生的困难补助,学习好且家庭贫困的,国家给钱。很荣幸我是其中之一。一年2000,高中三年一共6000,班主任二话不说揣入自己囊中。给我家长打电话,说上面要是有人查就说钱已经到手了。当时家里想,人在屋檐下,那就低个头吧。于是这国家困难补助的钱,一分不少的都呗班主任揣走了。6000元,在5年前我们县城可不是小数目。)
真是可笑。因为找校长沟通这事,结果班任特别讨厌我。谁成想最后我班就我一个考上一本的。要不是我,我班一个一本都没有,我还居然给班任撑了面子,我就哈哈哈了。
依兰教育质量真差。有的是老师课堂讲课故意放水,然后自己家里开的补课班里把知识点讲全。机智不机智,惊喜不惊喜?
一个县一共40个一本,还是几年内最好的一届,专业坑学生多少年。。。。没办法,谁让咱穷,没钱出去念书呢?不过依兰山好水好,人还是不错的,老师还有好的,只是不好的让我们赶上了而已。
其实除去教育、交通、治安等,依兰真是山好水好的,徽钦二帝囚禁的地方,现在还有坐井观天遗址,还是努尔哈赤的老家,塔克世家族世居地,还是五国城头城,有五国城遗址。只是当官的不开发这些旅游业罢了。地处东北大平原,居然还有山有水的。依着东山,傍着松花江。景色真不错。尤其是依兰的美女,特别美。很适合养老的一座县城。惊喜不惊喜?意外不意外?