数据结构之线性表(C语言版)

线性表  

解释:n个数据元素的有限序列。 数据元素是书中的名词,稍复杂点可以是一行数据,当然也可以是单个数据,不同情况下数据元素的具体含义不同,这个就是具体情况灵活使用了。比如我们要看从2005年到2016年的北京的房地产平均价格走势,那么,每年对应一条价格,这一条数据就算是一个数据元素,也称为记录。里面的各个字段对应的数值属于数据项。到这我们会感觉理解数据结构已经比较难了,却发现记这些别人规定好的名词也很难,其实起一个名字的目的是便于交流,起一个复杂的名字是为了准确地交流,层次就比较深了,因为研究越深涉及到的东西越多,就越容易混淆,所以刚开始就起一个不易混淆的名字。这样看来,我们只想明白数据结构,不会去做一些交流的事情,所以根本没必要去记住那些名词,但是你要理解文章就要看懂作者的表达,模棱两可的也是容易造成障碍,遇到矛盾我们要折中对待,对于重要的比如数据元素,需要理解透彻,它不仅代表一个数字或字符,也可能代表一条数据,即一条记录。懂就要懂透彻,否则就不知道,否则一堆名词就变成一团浆糊,理不清。明确关键的名词的含义,忽略不重要的名词,这是一种追求性价比的方式,和我们选购手机一样,但还是有区别的,因为架不住卖手机的是奸商,偷工减料啊,也不能一味贪便宜哈哈。会使用一些名词也是有好处的,否则,你说自己会数据结构,结果连数据元素是什么都不清楚,别人怎么会认为你懂数据结构呢?但是有些人为了显得高大上,把精力放在记单词上,比如有个老师说某门技术的特点那是一套套的,其实他都是专门花时间背的,但是我们学数据结构,主要是为自己学的,本末倒置终是不可取的,但是在理解了数据结构之后,花点时间用在增强自己描述的能力上也是很好的。

我希望抓住线性表的一些视觉上的特点来描述它,而不是像书中用符号表示元素之间的关系,我不能否认用数学方法描述问题,因为那是代表了严谨,但是损失了直观和可读性,阅读难度大,我只想知道线性表的特点,结果列出一堆数学公式,不就是相当于让我自己总结嘛,所以,虽然书的表达方式不喜欢,但是有总比没有强,透过现象看本质,有所选择地读,会更轻松些,也能有真正提高,更容易有成就感,也就有了学习的动力。其实作者这样推敲式地表达也很不容易,相信他也不希望这样,但这就是学术,它属于结论性的东西,枯燥是正常的,为了用最少的语言表达最精确的含义,这可能是最好的表达方式。拨云去雾,剥茧抽丝,数学公式只是作者表达的方式,我们要弄明白的是作者真实的想法。

特点一:线性表中的元素必定具有相同的特性。这个要求是合理的,不能是多个毫不相关的元素放在一起就称为线性表,否则之后进行线性表操作的时候就无法进行。

特点二:表中的元素是有序号的,书中称这个序号为位序,即根据位置确定的序号。有序号代表有前有后,也是方便表的操作,表的操作包括增删改查,获取元素个数,是否存在某个元素,以及创建表,清空表,销毁表。

特点三:表的长度可增长可缩短,也就是可进行插入和删除。

名词:抽象数据类型:数据类型有int,String等,之所以称之为数据类型,是因为他们代表的数据有固定的取值范围,能进行相应的操作,提到int类型就知道数据能进行哪些操作以及它的取值范围,这就是数据类型存在的意义。抽象数据类型和数据类型实际上是一个概念,int,string也可以称为抽象数据类型,是有固定的操作,只要记住提到抽象数据类型,就想到关于此类型的相关操作即可。具体的概念可以百度查询更详细的,这里我们只要达到方便理解书中内容的程度即可,知道它具体的定义没有意义,不如自己想象它是什么,那么它就是什么,方向对了就行。我给的这个理解很简单,我的想法是,不一定非要按照它的思路来,我们理解的抽象数据结构也不一定是错误的,甚至是对他们理解的数据结构的一种优化。我的目的是弄清楚数据结构是什么,而不是书中的概念指的是什么。概念是为关键部分服务的,只要能用,怎么定义都行。关键的部分根据我的理解就是它是什么样子,有什么规定,然后能运用逻辑推出其他结论。

另外,根据抽象数据类型里面提供的操作,我们能把两个表合成一个表,拆开一个表,复制一个表,其实就是运用查询,添加,删除等操作完成的,而且基于表的长度可变的。

下一篇会着重分析线性表的顺序表示和实现。

说几句心里话:我不知道别人看了我写的是什么反应,我想这取决于每个人的反应。反过来讲,无论别人给你下什么结论,比如精力没用在关键,算法说不定这辈子用不到,比如认真学就行了,想那么多干嘛,怎么有点无病呻吟的感觉,是不是活的太压抑了?比如,真牛逼,都能写博客了,你咋不上天呢?穷书生而已,那天真有钱了那才是真牛逼。这些可能的看法会影响到我写的过程,所以我想拿出来解决一下,坚定自己。我牛不牛逼,我没说过我牛逼,我就是把写的东西发出来,你要是第一感觉我牛逼,那就已经有答案了,你不愿意承认那就是你的问题了。对于我是不是在装逼,那什么叫装?有的人不是他的非说成他的,这才叫装,没钱非得搞排场,没文化非得装腔作势,明明英语不咋地非得中文里加几个单词显得自己留过学,我觉得我自己价值观很正,自己没有那本事就不去装,我保证文章是自己原创就可以了,这就不算装。我记得比较深的一次是在小学时,可能上课表现得太积极了,而我当时也很享受那种你们都不会只有我会的优越感,结果下课时被一个女同学给刺激了,大概的意思是别他妈装逼,少他妈嘚瑟,嘚瑟个鸡毛,就你会是不是?真是,要是换现在,别逼逼,出来干一架,我嘚瑟怎么了,有本事你也嘚瑟。的确,我也没有撒谎,更没有吹牛,我的嘚瑟完全是基于自己的本事,凭什么不可以,再说我又能嘚瑟几天,就是想表现自己罢了,这事用不着教育我吧。我发现大多数人的确不嘚瑟,但是都有想要嘚瑟的欲望,但是没那本事,嘚瑟几下没人回应就憋回去了,我觉得也不排除为了不让自己有嘚瑟的欲望,故意让自己没本事的可能性。他们的想法我感觉是觉得融入群体比自己牛逼更重要。我只想说,表现自己不丢人,因为有真本事才会去表现。比别人厉害也不丢人,谁都有谁的长处和短处,首先要分多面看一个人,不是说你一方面比别人强就是处处都强,我只是这方面强一些,没有要把你比下去的意思,我只是尽量发挥自己的长处罢了,这并不能影响我们之间的关系,你也应该发挥自己的长处,相互促进。假如不这样想的话,现实就是,学习的时候他比不上你,你鄙视他,颜值方面你比不上他,在他面前会自卑,与其这样我想不如互相欣赏,平等对待。

还有一种看法就是不好好干正经事,瞎想那么多干嘛。这样的话一般都是长辈或老师说的,同辈人没有这么说你的,因为同辈都是遇到和自己类似的问题,他自己都解决不了,又怎么会否定你的做法的正确性呢?老师一般是作为过来人来告诫你,瞎想没什么用,别再走弯路了,将来后悔的是你自己。我觉得他们的建议不是没道理,但是我也有我的道理,你的建议我会参考,但是不要强加给我,起码我没有说把时间浪费用在玩上。想写这个博客想得感觉有点吃不好睡不好了,怕自己的灵感消失了,想尽快完成这个成果。说到这说说写博客的意义吧,这其实是价值输出,现在都是共享经济,自己有好的东西就应该拿出来分享,这又不是给竞争对手。比如小米,创造了非常好的营销模式,教育用户的时候却顺便把友商教育了,结果友商把小米模式运用地比小米都好,我想雷军当初写那么多文章就是为了共享出来,但是却被对手悟道了灵魂。但是,就是这种共享精神成就了小米,也给未来埋下了伏笔,新的营销模式没有被及时创建出来,现在的小米在我看来已经回归了平静,走大多数企业走得道路。新人就要做点不一样的,否则怎么追赶你们这些前辈。安卓开源,java开源,有好东西干嘛要自己窝着,互相教育不更好?以前我们是被少部分精英教育,会看鲁迅的文章,现在是互相教育,有了问题网上一查,好答案有的是,或者关注自媒体,优秀公众号,各取所需,不会误伤。误伤的意思是所有人接受相同的教育,这绝对是种伤害。数据结构有没有用,在我看来是早晚都要会的,各种数据库存储数据都要用到数据结构,比如关系型数据库采取树的结构存储数据,进而影响到读取效率,所以我看数据结构是有动力的,而且有目标的。至于会不会最终舍本取末,首先,有一种本是最重要的,就是思想,思想不需要花时间去记,有就是有,没有就是没有,思想的作用域是你整个学习工作生涯,思想能促进你更努力地学习,让你少走弯路。少走弯路这件事主要靠自己,指望不了前辈,就像得病一样,最好的医生就是自己。我的目标就是技术大牛,达到靠直觉解决问题的程度。我的过程也告诉我自己不能随大流,否则吃亏的就是自己,到时候谁也帮不上忙。而且,丰富自己的知识面,是我目前效率最高的事情。达到一个目的不一定要按照常规路走,比如学好一项知识点也可以去看相关的书,了解更深的内容,简单的东西不就自然而然就会了。我不太喜欢走常规的路,和别人一样有什么意思,最感觉难受的就是做没有用的事情。比如高三的练习题,一遍又一遍反反复复,实际没什么长进,所以自己另辟蹊径,单点攻破,理顺一点是一点,花一半的时间达到好几倍的效果。

至于我是不是想太多了,我承认想的很多,但是写博客就是为了不再去想,把想的过程写下来下次就不用再纠结了。不写还是会去想,写出来就不会去想,你说写不写?

写博客的过程就是理顺自己,放下一些东西,专注于应该专注的。同时记录下自己从菜鸟成长起来的过程。

后面的博客希望尽量会回归到技术上,穿插自己对技术的看法。

你可能感兴趣的:(数据结构)