个人理解的数据结构

事先声明

博主是以C语言进入程序设计语言的大门,但是在有了一定编程基础后就转头学了JAVA,在学数据结构的时候又转头回来研究C语言,所以对数据结构的某些解释,一般会用JAVA来举例说明。
这个系列的博客文章是用于记录博主系统学习数据结构的,但是也可以用于他人参考,帮助自己学习数据结构,所以是需要一定的编程基础知识的。
但是所谓的编程基础知识,也只是限于知晓常用的C语言关键字及其作用罢了,不要求对C语言有多深的理解,反而因为文章的浅显,倒不适合有较深基础的人看。

数据结构的概念

数据结构这个东西,可以先从名称的字面意义上进行理解。
数据结构——分为两块来看,“数据”和“结构”。
数据好理解。博主理解为各种信息,由各种数字、字符、符号等承载信息所要表达的具体内容。比如博主穷死了,所以微信里面只有一块钱,那个数字1你一看,就知道博主穷死了。
结构就有意思了。说起结构,博主最开始啥都没想到,慢慢的有想法后,内容也是指例如房屋结构、汉字的结构等以前接收到的有关结构的具体信息。但是这个还是太具体了,不够抽象,会导致某些特例无法被囊括。1
这次系统的来学习数据结构,看到书中的解释,一下就明白了。关系。无论是汉字的结构、还是房屋的结构,其实都是他们内在的关系。比如 这个字,他的内在关系是 的组合,他们的关系是左右关系,又叫左右结构。再比如房屋的结构包含了 承重墙 等,他们之间有的是上下关系——你在我上面,我在你下面;有的是嵌入关系——梁嵌入了墙中;有的是并列关系——除了独一根的主梁外的其他类似排骨一样的房梁并列放置,等等等等,他们的关系随便你叫,但是无论怎么叫都可以抽象称为结构。
再将数据结构 合起来看,不论是 ,亦或是 承重墙 ,都可以称为数据,因为他们有他们承载的信息,只是和我们一般说的电脑内的字符不一样,但是为什么他们不能是大自然的字符呢,对吧。
所以对数据结构的理解是:各个相互之间存在关系的数据被放到一起,按照他们之间的关系进行摆放,最终形成了一个特定的样子。

数据结构的构成

接上文,你数据结构的概念有了,但是你要能用,你要能为人所用,不然它对我、对你、对人类来说就是无用的,没有意义的。
可是对于他的概念理解下来后,你会发现,,并无任何对其使用的介绍。这是因为它太抽象了,抽象到对其用思维进行理解都有一定的困难,更别说进行具体化的应用。
所以后来的人们,对数据结构的概念进行刨析划分,有了以下的规定,用来重新定义数据结构。
数据结构分为三种内部构造:逻辑结构物理结构运算法则

逻辑结构

因为是基于电脑的使用,所以将各种关系进行了分类,分为两大类:线性结构非线性结构。这些关系结构是仅限于逻辑思维的层面上,是符合人类的思维习惯的。

物理结构

又可以称为”存储结构“。如果说逻辑结构是思维层面上的,各种逻辑受限于人类的想象力,那么物理结构则是物质层面上的,受限于人类的生产力、科技等实质性的。因而你需要有一个优秀的存储结构,提升你在对有限材料的利用率。一般表现在数据的存取上,因为人类的科技发展限制,即使你拥有天马行空般的逻辑思维,即使你的逻辑再无懈可击,可是硬件上的限制,导致你的想法无法变现。所以就出现了物理结构,优化你数据的存取,大大提升了对现今的硬件使用率。

运算法则

在战场上,一般都是优秀精良的侦察队或者先锋部队,找到出一个敌军的破绽,然后将这个破绽交给后方庞大的军团,然后军团依据这个破绽从而占据优势,进而打败敌军。
庞大数据就是敌军;你就是侦察队或者先锋部队;电脑就是庞大的军团。你要用你灵活、优秀的大脑,找到一个处理全部数据的方式,不论是一个契合全部数据的规律的算法还是你将全部数据划分为几块,用几个小的算法进行处理,这就相当于找到了敌军的破绽,你再将这个算法写下来交给电脑,电脑就能依据这个算法将庞大的数据敌人全部处理掉,最终赢得这场胜利。

算法

其实所谓的算法就是一个含有针对某种特定问题的规律的计算式子。比如你要写一个计算两个数相加的加法算法:

// 以C语言为例
int a = 0;
int b = 0;
int c = 0;

//算法五大特点之一——输入
scanf("%d", &a);
scanf("%d", &b);

//这里就是算法的核心
c = a + b;

//算法的五大特点之一——输出
printf("%d", c);

算法的五大特点

1、有穷性

  • 算法的每一步都是可以结束的,而不是进入一个死循环。即每一条指令都可以被执行并且能够有结束时间。

2、确定性

  • 不可有二义性,即每条指令意义明确,不可以有歧义,不然算法将进入不可预测的情况中。

3、可行性

  • 即算法是可以被编写出来。算法一般都是现有抽象的逻辑思路,然后人们在通过不断的细分至算法可以被现有的条件实现出来。不能是你想了个思路,结果发现你没法写出来给电脑。

4、输入

  • 算法是用来解决一类特定问题的,一般这些特定问题一般都是至少有一个自变量的,所以,你的算法需要接收给它的自变量。

5、输出

  • 一般算法对于特定问题是有一个结果的。

结语

数据结构其实是和算法相结合的,不能将其分开。所以后续的内容会附带算法的内容,但都是较为简单的逻辑思维,难度顶天了也就是五大排序。
再就是回顾自己的这篇文章,总结了我目前为止对数据结构的理解,从整体上叙述了我对数据结构的看法。
这里我要说明一个东西:数据结构只是人为的命名,其实它更本质的、更抽象的东西早已存在,只是人类偶然发现,并使用了它,但都是较为片面的,并未触及本质的学习、使用。这是一个逻辑顺序,千万别是说人类发明了这个东西,人类没有发明任何东西,都只是对大自然某一方面的发现、总结、修改,从而使其更符合人类的使用。学习的路上要保持谦虚、谨慎。
最后,如内容有问题的,烦请斧正。


  1. 在学计算机的时候,你会无可避免的直面抽象。抽象在计算机中具有很重要的作用。因为从最底层的计算机原理上来说,各种计算机处理数据(计算机主要作用就是处理数据)的运行模式、算法等,都是由数学家将各种具体问题用数学语言去解释,然后用抽象的数学语言去找到这些具体问题的规律,然后再给出解决方法。 ↩︎

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值