.
声明:本人只是分享一些床长人工智能教程相关的免费pdf文档而已,并非床长人工智能网校的收费文章。尊重版权,支持原创!
深入理解数据结构
此文章只是结合自己的认识,不断学习更新中,仅供参考。
一数据结构介绍
数据结构是人们对数据存储的需求,所以产生对数据的特点分析,进而产生数据结构。
计算机可以大量对的数据进行处理,所以产生计算机的数据存储结构,这就是计算机领域的数据结构。
计算机数据库就是专门对数据存储和处理的载体。
其采用更高级算法对大量数据进行快速处理,对于软件开发人员,数据库可以说是必须掌握的知识。
二计算机存储方式
由于计算机硬件存储器决定计算机的存储方式,所以数据结构离不开计算机的存储结构。
计算机的存储方式硬件计算机通过地址线对内存单元进行访问,例如,容量为,即。
详细请参考计算机组成原理
所以硬件对一个计算机的性能产生直接影响。
计算机内存
三数据结构分类
根据计算机的存储结构,所以计算机对数据存储是有划分的。
操作系统对数据进行存储要申请空间,存储器最小单元为存储单元的大小按道理计算机可根据算法实现将其拆分为更小单元存储,当一个存储单元不够用时进行多个单元的申请具体看操作系统和编程语言实现的标准或国家标准。
这只是一种设计思想具体实现得按照需求设计。
基本数据类型存储结构思想
语言基本数据类型,,,,,
基本数据类型,,,,,,,
特点数据按块分配空间。
比如机器字长为,型为申请为一个内存单元,为申请两个内存单元
数组存储结构思想
编程语言基本上都有数组,因为其存储是连续的,比较方便,数组为某类型数据一次申请固定大小的存储空间,是物理连续的,即真实地址连续。
特点静态一次申请,申请之后大小无法改变,物理存储单元连续。
链式存储结构思想
根据数组的存储扩展而来的比较高级的存储结构。
利用对地址的存储存储下一个要执行的程序或代码的地址,进而对地址操作实现地址跳转。
所以引入指针类型概念,可以进行地址跳转。
由于程序直接进行地址访问对操作系统越权,所以太危险了,有写语言取消了直接对地址的访问,但是这种思想还在,所以有链式存储结构。
特点动态可进行多次申请内存单元,有可变性,存储地址实现逻辑连续,利用地址进行跳转。
四存储结构的分析
存储结构的比较数组创建之后无法改变大小,所以不考虑删除问题
存储结构
扩展性
访问速度
特点
基本类型
快
一次分配一个或多个连续存储单元
数组
不可扩展
中
一次分配多个连续的存储单元
链表
可扩展
慢
按需分配存储单元,逻辑连续
访问数组链表速度快慢分析
数组存储物理地址连续,可有规律存取。
利用计算其地址访问,或按块加载进中进行后续操作。
对单个数据访问比如读取数组第个元素顺序结构可以直接,按照首地址和每个数据大小进行计算,直接找出地址为的数据。
若访问越界,则运算其地址就可以判断。
对多个数据如果要加载数组所有数据可计算首地址和数组大小及每个数据大小,计算地址范围对其进行按块加载。
例如按其规律进行设计只是一种思想,具体实现可参考专业书籍,对四位地址进行处理,取第一位从右往左为,后三位任意,对其选中加载到中进行后续操作。
可实现按块加载只要硬件能跟上,速度极快。
顺序存储
链表存储逻辑连续,具有动态性,分为数据域因为内存按需申请所以同一个链表数据域可以不同,具体看其算法实现和指针域指针域可以有多个,按需求设置,显而易见数据域存储数据指针域存储地址跳转地址。
对单数据访问必须从首地址进行操作,一个存储单元一个存储单元读,若读到跳转操作则进行跳转,直到找到目标数据。
例如对链表第个数据域进行操作,则只能通过第一个数据域才能找到第二个数据域。
若访问数据越界,则只有读取完最后一个数据域才能判断。
例如对链表第个数据域进行操作,则通过第一个数据域找到第二个数据域,读取完第二个数据域发现没有数据了,那么产生错误,若继续对下一个地址读取则会对计算机产生不可控制性错误,危害性极大。
对多个数据进行访问必须对第一个数据域进行访问,才能找到第二个数据域的地址读取其数据直到找完所有数据。
数组和链表各有各的特点,具体使用哪种看需求。
高级的数据结构可由数组或链表实现,比如,栈队列树堆
这些高级数据结构可利用其功能设计目标等需求用数组或链表思想实现。
个人看法学习数据库,数据结构,算法时,回顾一下离散数学内容。。。。