【数据结构与算法 - 数据结构基础】什么是数据结构?
【数据结构与算法 - 数据结构基础】什么是数据结构?
文章目录
- 【数据结构与算法 - 数据结构基础】什么是数据结构?
- 1 数据结构包含的三个方面
- 1.1 数据的逻辑结构
- 1.1.1 线性结构
- 数组【Array】
- 链表【LinkedList】
- 栈【Stack】
- 队列【Queue】
- 1.1.2 树结构【Tree】
- 1.1.3 图结构【Graph】
- 堆【Heap】
- 1.1.4 散列表【Hash】
- 1.2 数据的存储结构
- 1.2.1 顺序存储【Sequential Storage】
- 1.2.2 链式存储【Linked Storage】
- 1.2.3 索引存储【Index Storage】
- 1.2.4 哈希存储【Scatter Storage】
- 1.3 数据操作
- 数据,data:符号集合、处理对象
- 结构:各个组成部分的搭配和排列
- 数据元素:数据的基本单位,可由若干个数据项组成
→ 数据结构 data structure:数据的组织、管理和存储格式。
要与算法结合起来说的话,数据结构就是我们能够执行算法的“原材料”。数据结构 + 算法 = 程序设计。
通常情况下,更优的数据结构可以给程序带来更高的运行以及存储效率。
简单来说,数据结构的定义就是一种程序设计优化的方法论,它不仅讨论到存储的数据,同时也考虑到彼此之间的关系与运算,使之达到加快程序执行速度与减少内存占用空间等作用。
1 数据结构包含的三个方面
数据结构(data structure)指数据元素之间存在的关系。
主要包含以下三个方面:
- 数据的逻辑结构
- 数据的存储结构
- 数据操作
1.1 数据的逻辑结构
1.1.1 线性结构
数组【Array】
数组是一种典型的线性数据结构。它是存储在连续内存位置的相似类型数据项的集合。
数组是最简单的数据结构,它的每个数据元素都可以使用索引号随机访问。
链表【LinkedList】
链表是一种物理存储上非连续,数据元素的逻辑顺序通过链表中的指针链接次序,实现的一种线性存储结构。
Java 集合框架中的LinkList 类,底层的实现就是 链表。
栈【Stack】
栈是以数组或者链表为基础,封装出来的一种数据结构。
栈(stack)又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。
队列【Queue】
队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。
1.1.2 树结构【Tree】
树,是一种一对多的数据结构,天生就非常适合用来检索。
它是由n(n≥0)个有限节点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。
Java集合框架当中有一个TreeMap类,用于存储键和值的映射,不但查找很高效,还能保证键的有序排列。它的底层实现就是一种名为红黑树的特殊二叉树。
1.1.3 图结构【Graph】
图,是一类多对多的数据结构,非常适合用于表述众多对象之间的复杂关系。
堆【Heap】
堆是一种特别的完全二叉树。
其定义为:给定堆中任意节点P和C,若P是C的母节点,那么P的值会小于等于(或大于等于)C的值。
堆最常见的作用是可以迅速找到一堆数当中的最大值或者最小值。
1.1.4 散列表【Hash】
散列表Hash table,也叫哈希表。
散列表用的是数组支持按照下标随机访问数据的特性,所以散列表其实就是数组的一种扩展,由数组演化而来。可以说,如果没有数组,就没有散列表。【散列表是一种非线性的数据结构】
树是图的特例,树是连通的无回路的无向图;线性表是树的特例,线性表是单枝树。
1.2 数据的存储结构
1.2.1 顺序存储【Sequential Storage】
顺序存储是所有的结点元素存放在一块连续的存储区域中,用存储结点的物理位置来体现结点之间的逻辑关系的存储方法。
在高级语言中,一块连续的存储空间通常可用一个数组来表示。因此,顺序存储通常用一个数据元素类型的数组来存储。最经典的顺序存储结构是顺序表,将线性结构的元素按序存放在一个数组中 。
1.2.2 链式存储【Linked Storage】
链式存储结构,又叫链接存储结构。在计算机中用一组任意的存储单元存储线性表的数据元素(这组存储单元可以是连续的,也可以是不连续的)
它不要求逻辑上相邻的元素在物理位置上也相邻.因此它没有顺序存储结构所具有的弱点,但也同时失去了顺序表可随机存取的优点。
1.2.3 索引存储【Index Storage】
索引存储,分别存放数据元素和元素间关系的存储方式。
所有的存储结点存放在一个区域。另设置一个索引区域存储结点之间的关系。
索引是为了加速检索而创建的一种存储结构。它是针对一个表而建立的,是由存放表的数据页面以外的索引页面组成的。
1.2.4 哈希存储【Scatter Storage】
哈希存储亦称“散列存储”,专用于集合结构的一种存储方式。
该方法的基本思想是:根据结点的关键字直接计算出该结点的存储地址。
数据元素存放在一块连续的存储区域中。数据元素的存放位置是通过一个哈希函数计算而得的。哈希函数将数据元素作为自变量,计算得到的函数值是数据元素的存储地址。
【应用】用于支持集合结构的动态查找。
1.3 数据操作
【1】初始化。
【2】判断是否空(isEmpty)状态。
【3】存取,指获得(get)、设置(set)指定元素值。
【4】遍历(traverse),指按照某种次序访问一个数据结构中的所有元素,并且每个数据元素只被访问一次。线性次序遍历。
【5】统计数据元素个数。
【6】插入(insert)、删除(remove)指定元素。
【7】查找(search),指在数据结构中寻找满足给定条件的数据元素。
【8】比较相等(equals),指两个数据结构形态相同,其中各对应元素分别相等并且数据元素个数相等。
【9】复制数据结构(深拷贝)及其中所有元素。
【10】排序(sort),指对数据元素按照指定关键字值的大小递增(或递减)次序重新排列。
【数据结构与算法 - 数据结构基础】什么是数据结构?相关推荐
- 大话数据结构与算法:基础篇
1.数据结构的重要性 数据结构是计算机软件相关专业的基础课程,几乎可以说,要想从事编程工作,无论是否是科班出身(比如我,标准的非科班人员,我是学医的,哈哈)都不可以绕过数据结构与算法这部分知识. 数据 ...
- 数据结构与算法之基础概述
目录 数据结构和算法的重要性 数据结构概述 逻辑结构 存储结构 算法概述 如何理解"大O记法" 时间复杂度 空间复杂度 数据结构和算法的重要性 算法是程序的灵魂,优秀的程序可以在海 ...
- 获取用户列表为空_数据结构和算法(Golang实现)(15)常见数据结构-列表
列表 一.列表 List 我们又经常听到 列表 List 数据结构,其实这只是更宏观的统称,表示存放数据的队列. 列表 List:存放数据,数据按顺序排列,可以依次入队和出队,有序号关系,可以取出某序 ...
- Python数据结构与算法(1.1)——数据结构与算法导论
Python数据结构与算法(1.1)--数据结构与算法导论 0. 学习目标 1. 数据结构概述 1.1 什么是数据结构 1.2 逻辑结构和物理结构 1.3 抽象数据类型 1.4 数据结构学习的必要性 ...
- 数据结构与算法学习——基础知识(一)
数据结构与算法 线性结构和非线性结构 基本概念 线性结构 非线性结构 稀疏数组 基本概念 稀疏数组的处理方法 举例说明 应用实例 代码实例 队列 基本介绍 示意图 数组模拟队列 思路分析 代码实现 数 ...
- 【数据结构与算法】第一篇:数据结构
系列文章目录 提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加 TODO:写完再整理 文章目录 系列文章目录 前言 STL库的介绍 容器(containers) 算法(algorith ...
- 【数据结构与算法】如何高效学习数据结构与算法
前言 本文是个人基于覃超老师的<算法训练营>的学习笔记,此笔记的内容都是学习后的个人记录.个人总结.理解和思想.仅供参考学习. 很多同学在大学的时候会觉得数据结构与算法很枯燥,很多小伙伴都 ...
- 数据结构与算法(Java版) | 数据结构与算法的重要性
通过前几讲我给大家介绍的几个经典的算法面试题,相信大家现在应该对数据结构与算法有了一个很浓烈的学习兴趣,嘻嘻
- 【数据结构与算法】基础数据结构与算法大全
一.用过的编程语言 Java Python JavaScript 二.数据结构的知识梳理 数据结构入门基础梳理 数据结构一些基本常识的笔记 算法复杂度的几点笔记 对顺序表动态分配方式的思考 循环队列的 ...
- java 中的数据元素的定义_Java数据结构和算法的基础概念
一.基本的概念 1.数据 是客观描述事物的符号,是计算机中操作的对象,是能被计算机识别.并输入给计算机处理的集合 2.数据元素 是组成数据的,有一定意义的基本单位. ...
最新文章
- MPB:生态环境中心张丽梅组-​植物微生物组DNA提取扩增及溯源分析(视频)
- Java判断一个数是否是回文数
- 人工智能TensorFlow工作笔记007---认识张量
- matlab虚拟现实之使用V-Realm Builder2建模
- Qt之QListView使用
- 制作的LINUX安装软件,竟然导致系统无法启动
- keyshot卡住了还能保存吗_Sketchup建模和渲染能取代3dsMax吗?
- dea分析的matlab实现,利用MATLAB进行DEA交叉评价分析
- 通过PyMuPDF编写增值税发票多PDF文件合并工具
- 使用MySQL存储过程给表批量造数据
- 仿9GAG制作过程(五)
- SQL对象名无效的解决
- qt中将按钮指向的鼠标变成手型
- Ubuntu 18.04 LTS上编译安装BCC
- 华为、苹果、高通,谁在领跑?全面解读清华AI芯片报告
- matlab三维曲线的绘制
- 设计分享|基于单片机的跑马灯
- SM2椭圆曲线公钥密码算法(Python实现)
- 杰理之芯片使用注意事项【篇】
- 喝酒摇骰子重启人生多款微信小程序源码分享
热门文章
- 迈向“超人认知”:脑机接口的未来
- Apache2.2.22 + PHP5.2.17 + MySQL5.5.22 快速搭建部署PHPWind开源论坛
- matlab 28m35,F28M35H52C1学习笔记3
- python中三引号是什么意思_python中三个单引号是什么意思
- 解决Expected all tensors to be on the same device, but found at least two devices, cuda:0
- python大赛对名_团队作业1——团队展示选题
- 华为设备配置SSH远程登录
- 盈一指风华,浅梦一程。生命的美丽
- 手机linux系统介绍,Ubuntu手机系统介绍及Ubuntu刷机教程分享
- 【English】主语从句的引导词是如何选择?