数据结构中数据的存储结构


theme: channing-cyan

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第27天,点击查看活动详情

数据的存储结构

数据的存储结构的作用

数据的存储结构应正确地反映数据元素之间的逻辑关系,也就是说在设计某种逻辑结构对应的存储结构时需要在计算机内存中存储两个方面的信息,即存储逻辑结构中的所有数据元素和存储数据元素之间的逻辑关系,所以将数据的存储结构称为逻辑结构的映像

21f71e14b626374a397e6309b07b6d0.jpg

总的来说,存储结构是面向计算机的,基本目标是将数据及其逻辑关系存储到计算机中。

  • 代码示例 ```java class Student{ int NO; //学号 String names; //姓名 int score; //分数

    public Student(int NO1,String names1,int score1){ NO=NO1; names=names1; score=score1; } //定义一个数组,用于存放学生的成绩表 Student1 st=new Student1[2]; st[0] = new Student1(20221025,"ikun",100); st[1] = new Student1(20221026,"小黑子",0); st[2] = new Student1(20221027,"李智",60); }

``` 注:这种存储结构的特性是所有元素存放在一片地址连续的存储单元中,逻辑上相邻的元素在物理位置上也是相邻的,所以不需要额外空间表示元素之间的逻辑关系。

存储结构的类型

顺序存储结构

顺序存储结构是把逻辑上相邻的元素存储在物理位置上相邻的存储单元里,元素之间的逻辑关系由存储单元的邻接关系来体现(直接映射),我们一般使用数组来实现 - 特点: 1. 节省存储空间,因为分配给数据的存储单元全部用于存放元素值,元素之间的逻辑关系没有占用额外的存储空间,就像上面举例的代码例子。 2. 可实现对结点的随机存取,即每个元素对应一个序号,由该序号可直接计算出元素的存储地址(这也是定义)

链式存储结构

链式存储结构中的每一个逻辑元素用一个结点存储,不要求逻辑上相邻的元素在物理位置也相邻,元素间的逻辑关系使用附加的指针域来表示。我们一般使用指针来实现

  • 优点:便于插入和删除操作。仅需要修改相应的结点的指针字段,不需要移动结点。
  • 缺点:和顺序存储结构相比,空间的利用率较低,因为需要分配一部分存储单元来存储元素之间的逻辑关系。因为逻辑上相邻的元素在存储空间不一定相邻,所以不能进行随机存取

索引存储结构

索引存储结构通常是在存储元素信息的同时还建立附加的索引表。索引表中的每一项称为索引项,索引项一般形式是关键字、地址等。关键字唯一标识一个元素,索引表按关键字有序排列,地址作为指向的指针。这种存储结构就能很大的提高数据查询的速度。它就有点我们书上的目录,按照目录上的关键字和页数,就能很快的查阅到想看到的内容。 - 线性结构采用索引存储方法后可以对元素进行随机访问,在进行插入、删除运算时只需移动存储在索引表中对应元素的存储地址。 - 缺点:增加了索引表,降低了空间利用率

哈希存储结构

哈希存储结构的基本思想是根据元素的关键字通过一个哈希函数直接计算一个值,并将这个值作为该元素的存储地址。它只存储元素数据,不存储元素间的逻辑结构。通常适用于能够对数据快速查找和插入的场合。 - 优点:查找速度快,只要给出待查元素关键字就可以立即算出该元素的存储地址(可以了解一下区块链IPFS的文件存储之类的)。

总结

这么多种存储结构,分开可能就存在于简单的一些实际应用中,复杂一点的实际应用一般都是多种存储结构组合使用。主要考虑运算实现是否方便和算法的时空性能要求,根据需求定存储结构。

猜你喜欢

转载自blog.csdn.net/y943711797/article/details/132974240