数据结构学习总结(一)

数据结构学习总结(一)

 

 

我们讨论的数据结构,一般是指数据在内存中的组织形式。从本质上来说,数据在内存中有两种存储方式。一种是连续存储,另一种是离散存储。连续存储是指数据存储时,在内存中是连续不间断的,而离散的则是指不连续的,间断的。

连续存储由于数据存储时连续的,故而知道了第一个元素的地址,就可以推知其他元素的位置,从而遍历所有数据;也是由于同样的原因,连续存储的存储单元(unit)只需存储数据本身,因而可以节省存储空间。如下图:

与此相反,离散存储由于是不连续的,所以无法从第一个元素的位置推知所有其他的位置。但是,我们存储数据必须保证我们可以随时访问得到(否则岂非白费功夫?)。为了达到这个目的,存储数据时就不能只存储数据本身,还需要存储下一个单元的位置(地址)。如下图:

在C、C++中,存储的一般是指向下一个单元的指针,而在C#、Java、Python这些完全面向对象的语言中,则存储一个变量,该变量引用下一个数据单元(C#、Java、Python中每一个数据单元均为一个对象,而引用对象的变量则存储该对象在内存中的地址,实质上跟C、C++的指针差不多,只不过对其进行了抽象、封装)。

连续存储方式最简单的就是数组,这也是最常用的方式,在许多编程语言中都内置了数组(貌似除了汇编以外,其他语言都有数组或近似数组的数据类型)。连续存储一定是线性的,而离散存储,在我看来应该分为两类,一类是线性的,一类是非线性的。线性的如链表,非线性的如树、十字链表等,下面将会讨论到。

我将从思想(概念)以及实现原理两方面进行总结,所以这些数据结构我都用C语言并假设数据的类型为int(整数)的前提下实现了(在C++、C#、Python等语言中这些数据结构已经实现到它们的语言本身或其标准库中),可以到Github:https://github.com/githubligao/Data-Structure.git或者百度网盘:http://pan.baidu.com/s/1rsMZW上下载我的实现代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值