数据结构从0.2到1

为什么要选择这样的一个标题呢,当然,主要是要写一系列关于学习数据结构的文章。但是,为什么是从0.2呢?因为作为一名计算机专业毕业的学生来说,实在不好意思说自己从0到1,我真的是怕老师看到后会打过来。。。关于数据结构,可能是因为大学时没有学好,反正已经忘了十之八九,这个系列算是复习,巩固,提高。由于大学时的教材已经...所以最近想要再学习数据结构的时候,就选择了《大话数据结构》这本书。

if you give someone a program, you will frustrate them for a day; if you teach them how to program, you will frustrate them for a lifttime.

这是这本书的开场白,至于我为什么也选择它作为开场白呢?其一,我还没有到可以教人写程序的高度,但是还是希望这一系列文章可以对你有借鉴意义,大牛可以略过,当然,也希望各位大牛可以指导小弟,不吝赐教,其二,同时也是最重要的,觉得这句话很nb有木有,装b利器有木有,整个人的逼格都已经得到了升华有木有。
是时候展现真正的技术了,以上皆是废话,对不起,耽误了您那宝贵的几秒钟,宝宝心理还是满满的愧疚感呢。。。

为什么要学数据结构

因为我是程序员。。。仅此而已。

程序设计的实质是对确定的问题选择一种好的结构,加上设计一种好的算法。

敲代码这件事得难易程度可能很大一部分是由自己决定的,可以像板砖,从这边搬到那边。当然也可以拒绝,写出运行效率更高而且更漂亮的的代码,但是这不是件容易的事,它真的是需要一些关于数据结构的基础。

基本概念

在学习数据结构的过程中,我们可能会遇到很多的专业术语,而且这些术语真的很容易相互混搅,所以这里先做一个总结,尽我所能尽量解释清楚。

数据(Data)

数据是描述客观事物的富豪,是计算机中可以操作的对象,是能被计算机识别,并输入给计算机处理的符号集合。

太抽象了,完全不知道是什么鬼!
这里有一个很重要的特征“可以输入到计算中”。可以被输入的,必然是可以被处理的,比如一块石头坑定输入不进去更别说被处理,但是如果以一个视频的话,肯定是可以被存储的存储器里并且可以被处理的,包括,解码,压缩,格式转换等等。

数据元素(Data Element)

是组成数据的、有一定意义的基本单位,在计算机中通常作为整体处理。

比如我们说树林肯定就是由一颗颗树组成的,而这一颗树就可以被称为数据元素。
比如有一个表,存储了很多本书,那么这其中一条关于书的记录就是一个数据元素。

数据项 (Data Item)

数据项是数据的不可分割的最小单位。比如,包括书名、作者名、分类号、出版单位及出版时间在内的一条书目信息在计算机图书管理程序中被作为一个数据元素来看待。而书名、分类号等被称作数据项。

数据对象 (Data Object)

数据对象是性质相同的数据元素的集合,即具有相同数量和类型的数据项。是数据的一个子集。
例如,整数数据对象的集合可表示为N={0,±1,±2…….},字母字符数据对象的集合可表示为C={‘A’,’B’,…’Z’}。

数据结构(Data Structure)

数据结构是相互之间存在一种或多种特定关系的数据元素的集合。在现实世界中不同的数据元素之间并不是相互独立的而是存在某种特定关系的,我们将这种关系称为结构。

逻辑结构和物理结构。

按照视角的不同,数据结构可以分为逻辑结构和物理结构。

逻辑结构

逻辑结构是我们主要需要关注的,是用来描述数据元素之间的特定关系的。我们根据数据元素之间关系的不同特性,将数据结构划分为四种类型。

集合

在集合结构中,数据元素之间除了“同属于一个集合”的关系外,别无其它关系。如下图所示的几个小圆,它们之间并不存在特殊关系,除了被包含在同一个大圆内以外。

clipboard.png

线性结构

线性结构中的数据元素之间存在一对一的关系,即相邻数据元素之间具有“前驱”和“后继”的关系,线性表是一个典型的线性结构。栈、队列、串等都是线性结构。

clipboard.png

树形结构

树形结构中的数据元素存在一种一对多的层次关系

clipboard.png

图形结构

图形结构中数据元素间存在多对多的关系。由于“集合”是数据元素之间关系极为松散的一种结构,因此也可以用其它结构来表示它。
clipboard.png

物理结构

物理结构是指数据的逻辑结构在计算机中的存储形式,数据的存储结构应该正确反应数据元素之间的逻辑关系。数据元素的存储结构有两种形式:顺序存储和链式存储。

顺序存储结构

顺序存储把一系列数据元素存放在一组连续的存储单元内,其数据间的逻辑关系和物理关系应该是一致的。如下图:

clipboard.png

顺序表存储密度较大,节省空间;但需要事先确定容量,在时间性能方面,读运算较快,但在插入和删除元素的时候可能会移动大量的元素因此可能会

链式存储结构

链式存储结构把数据元素存放在任意的存储单元内,这组存储单元不一定要连续,此时其存储关系并不能在反映其逻辑关系。在这种情况下,我们就需要指针来找到相关的元素。
今天就到这里了,以后会持续更新。


wupengyu
1.8k 声望166 粉丝

写作是为了更好的思考


引用和评论

0 条评论