数据结构(顺序结构、链式结构、索引结构、散列结构)

简介: 数据结构(顺序结构、链式结构、索引结构、散列结构)

1.概述

数据结构,就是一种程序设计优化的方法论,研究数据的逻辑结构和物理结构以及它们之间相互关系,并对这种结构定义相应的运算,目的是加快程序的执行速度、减少内存占用的空间

2.数据间逻辑关系

数据的逻辑结构指反映数据元素之间的逻辑关系,而与数据的存储无关,是独立于计算机的。

  • 集合结构:数据结构中的元素之间除了“同属一个集合” 的相互关系外,别无其他关系。集合元素之间没有逻辑关系。
  • 线性结构:数据结构中的元素存在一对一的相互关系。比如:排队。结构中必须存在唯一的首元素和唯一的尾元素。体现为:一维数组、链表、栈、队列
  • 树形结构:数据结构中的元素存在一对多的相互关系。比如:家谱、文件系统、组织架构
  • 图形结构:数据结构中的元素存在多对多的相互关系。比如:全国铁路网、地铁图

3.数据的存储结构(或物理结构)

数据的物理结构/存储结构:包括数据元素的表示和关系的表示。数据的存储结构是逻辑结构用计算机语言的实现,它依赖于计算机语言。

3.1顺序结构

  • 顺序结构就是使用一组连续的存储单元依次存储逻辑上相邻的各个元素。
  • 优点: 只需要申请存放数据本身的内存空间即可,支持下标访问,也可以实现随机访问。
  • 缺点: 必须静态分配连续空间,内存空间的利用率比较低。插入或删除可能需要移动大量元素,效率比较低

3.2链式结构

  • 不使用连续的存储空间存放结构的元素,而是为每一个元素构造一个节点。节点中除了存放数据本身以外,还需要存放指向下一个节点的指针
  • 优点:不采用连续的存储空间导致内存空间利用率比较高,克服顺序存储结构中预知元素个数的缺点。插入或删除元素时,不需要移动大量的元素。
  • 缺点:需要额外的空间来表达数据之间的逻辑关系,不支持下标访问和随机访问。

3.3索引结构

  • 除建立存储节点信息外,还建立附加的索引表来记录每个元素节点的地址。索引表由若干索引项组成。索引项的一般形式是:(关键字,地址)。
  • 优点:用节点的索引号来确定结点存储地址,检索速度快。
  • 缺点: 增加了附加的索引表,会占用较多的存储空间。在增加和删除数据时要修改索引表,因而会花费较多的时间。

3.4散列结构

  • 根据元素的关键字直接计算出该元素的存储地址,又称为Hash存储。
  • 优点:检索、增加和删除结点的操作都很快。
  • 缺点:不支持排序,一般比用线性表存储需要更多的空间,并且记录的关键字不能重复。

4.运算结构

施加在数据上的运算包括运算的定义和实现。运算的定义是针对逻辑结构的,指出运算的功能;运算的实现是针对存储结构的,指出运算的具体操作步骤。

  • 分配资源,建立结构,释放资源
  • 插入和删除
  • 获取和遍历
  • 修改和排序

相关文章
|
存储 缓存 NoSQL
内存管理基础:数据结构的存储方式
数据结构在内存中的存储方式主要包括连续存储、链式存储、索引存储和散列存储。连续存储如数组,数据元素按顺序连续存放,访问速度快但扩展性差;链式存储如链表,通过指针连接分散的节点,便于插入删除但访问效率低;索引存储通过索引表提高查找效率,常用于数据库系统;散列存储如哈希表,通过哈希函数实现快速存取,但需处理冲突。不同场景下应根据访问模式、数据规模和操作频率选择合适的存储结构,甚至结合多种方式以达到最优性能。掌握这些存储机制是构建高效程序和理解高级数据结构的基础。
1165 1
|
人工智能 安全 JavaScript
Open Interpreter:AI 赋能终端!在终端中对话AI模型进行编程,通过运行代码来完成各种计算机操作任务
Open Interpreter 是一个让语言模型运行代码的强大工具,提供了一个类似 ChatGPT 的界面,支持多种编程语言和丰富的功能。
1986 7
Open Interpreter:AI 赋能终端!在终端中对话AI模型进行编程,通过运行代码来完成各种计算机操作任务
|
消息中间件 缓存 调度
常见的8种数据结构
常见的数据结构包括数组、链表、队列、栈、树、堆、哈希表和图。
637 5
|
存储 Python
用python将csv转excel (.xls和.xlsx)的几种方式
用python将csv转excel (.xls和.xlsx)的几种方式
1188 4
|
机器学习/深度学习 自然语言处理 算法
《深度解析:全连接层—卷积神经网络中的关键纽带》
全连接层在卷积神经网络(CNN)中起着桥梁作用,将卷积层和池化层提取的局部特征整合为全局特征,实现分类或回归任务。每个神经元与前一层所有神经元相连,通过权重和偏置进行特征转换,并引入激活函数以增强非线性建模能力。尽管参数量大易导致过拟合,但可通过正则化、Dropout和批标准化等技术有效应对,从而提升模型性能。
1625 8
|
存储 算法 Python
秒懂算法 | 排列树模型——旅行商问题的分支限界法
介绍旅行商问题的队列式分支限界法、优先队列式分支限界法及其改进、改进算法的Python编程实战。
1792 1
秒懂算法 | 排列树模型——旅行商问题的分支限界法
|
算法 调度 UED
深入理解操作系统的进程调度机制
本文旨在探讨操作系统中至关重要的组成部分之一——进程调度机制。通过详细解析进程调度的概念、目的、类型以及实现方式,本文为读者提供了一个全面了解操作系统如何高效管理进程资源的视角。此外,文章还简要介绍了几种常见的进程调度算法,并分析了它们的优缺点,旨在帮助读者更好地理解操作系统内部的复杂性及其对系统性能的影响。
|
监控 安全 算法
简单来看看什么是侧信道攻击
简单来看看什么是侧信道攻击
1312 0
|
存储 Java
数据结构之顺序存储结构和链式存储结构分析 , 图文并茂 , 又涨姿势了
单链表/双向链表头插/头删时间复杂度 : O(1) 单链表/双向链表中间插入/删除时间复杂度 : O(N) 循环链表插入/删除时间复杂度 : O(N) 单链表/双向链表/循环链表获取数据时间复杂度 : O(N) 数组头插/头删时间复杂度 : O(N) 数组尾删/尾插时间复杂度 : O(1) 数组中间插入/删除时间复杂度 : O(N) 数组/动态数组根据下标随机访问时间复杂度 : O(1)
3707 0
|
存储
【数据结构】树的定义、树的存储结构
【数据结构】树的定义、树的存储结构
678 0
【数据结构】树的定义、树的存储结构

热门文章

最新文章