概念与理解
数据结构,就是指数据之间的关系。维基解释在这里,但是显然这个只适合概括以及定义,对理解帮助一般。
于是根据数据之间各种不同关系,有了各种数据结构。
总的来说,分为:
1. 存储结构(物理结构)
2. 逻辑结构
逻辑结构,便是主观的,为了实现一些要求赋予数据的关系。
存储结构,指数据存储在计算机上的结构,客观的,甚至是可见的。
把人比作数据,人之间关系便是数据结构。假设一个场景:去银行办理业务。
根据不同情况,一般银行会让排队或者抽号来安排顺序。排队的话,大家也许会按照先来后到,或者大小个(当然这个不太可能~)。按号的话就是有自己抽号然后按序号了。这个便是逻辑结构。排队,只能呆在你固定的队伍位置,大家都排成一列,站的位置便代表了顺序。而抽号,有了自己编号,你可以随意选个地方呆着,只要在营业厅(内存)中能找到你,到你了会叫你的编号。这里的排队便等同于数据结构中顺序结构
,抽号自然是链式结构
。这两种都是因为大家同在营业厅才有的关系,也许一个人都不认识。这种关系是客观的一种存在,等同于数据之间存储结构(物理结构)
。因此,数据结构的关系中,存储结构可以包括:顺序结构和链式结构。
如上情境:
-
也许在营业厅发现好多熟人,如果刚好只有爷爷爸爸,那之间的关系就是爷爷->爸爸->自己,但是这个关系和你们位置没有任何关系,也许你们排队你还是第一的,或者抽号后一人一个角落待着。因此发现其实你们存在两种关系,一种亲情(逻辑结构),一种位置(物理结构)。如果如之前爷爷->爸爸->自己这一种关系,这种一条线连接的便成为
线性结构
。 -
如果七大姑八大姨的来了很多,那按照族谱有家谱的一个树形结构,同样,数据结构数据间关系如果也有这中结构,便成为
树形结构
。 -
如果是一群师生呢?一个老师很多学生,一个学生又有很多个老师的,这种“乱七八糟”关系呢?那就把所有关系列出来,组成
图状结构
。 -
当然也有可能你一个不认识的,大家只不过都在营业厅罢了,那这种结构可称作
集合
。
事实上,容易发现,不管所有人组成什么树,图等等结构的,都不影响是排队还是抽号,当然也不受其影响
逻辑结构如同武功招式,存储结构为内功心法。一门内功催动多种招式,当然,放"大招"的话也可以用多个心法催动~
数据结构的类型还有栈,队列等一系类的,其实都属于逻辑结构,是抽象出的一种关系,然后再加上限定的操作。比如队列和栈,操作的数据其实可以使同一组数据,只是因为不同需求给他们固定了操作方式。
就像同一杯水,同样从杯口加水,你可以直接喝,也可以用吸管,但是喝到的水一种是先加的先喝(队列/吸管),一种后加的先喝(栈)。唯一区别就是多开了个口(吸管),而且还非要从吸管喝。如果有吸管,你不用,那其实就没区别了。
常用数据结构类型:
- 数组(Array)
- 堆栈/栈(Stack)
- 队列(Queue)
- 链表(Linked List)
- 树(Tree)
- 图(Graph)
- 堆(Heap)
- 散列表(Hash)
部分简单实现
题外
概念理解类的东西,还是对比实践才能理解。听的明白清楚,也许本身消息源就是错误的,那怎么可能得知真相。或许他想的对的,但表述出来,或者你理解进去就错了。正如道可道,非常道
一样,写完这篇自己理解的结构,但是过了数天发现又有很多地方不严谨,理解不到位+表达能力不足,使自己不能详尽描述,又恐自己所想在之后对自己或他人影响,加此段。关于学习和道
联系的拙见,也许可以笑话这里。