初探数据结构

NWGDK NWGDK     2022-11-12     511

关键词:

一、基本概念和术语

  • 数据:是描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别,并输入给计算机处理的符号集合。
  • 数据元素:是组成数据的、有一定意义的基本单位,在计算机中通常作为整体处理。也称为记录。
  • 数据对象:是性质相同的数据元素的集合,是数据的子集。

上面是一些官方的定义,下面是我自己的理解。

数据元素也就是一条条记录,它可以是单一的,也可以是由多个数据项组成。用过数据库的童鞋应该都知道,数据表中的每一行记录都是一个数据元素,每一列都是一个数据项,数据项是数据元素的子集。例如下图:每一个人记录都是一个数据元素,一个数据元素由姓名、年龄等这些数据项组成。

DataElement

在数据集合中可以是性质相同的数据元素,也可以是性质不同的数据,而这里的数据对象其实就是性质相同数据元素的集合。

DataElement

二、数据结构的分类

数据结构:是相互之间存在一种或多种特定关系的数据元素的集合。

数据结构又可以分为下面两种结构:

  1. 逻辑结构:是指数据对象中数据元素之间的相互关系。

    逻辑结构又分为以下四种:

    • 集合结构:集合结构中的数据元素除了同属于一个集合外,它们之间没有其他关系。
      集合结构
    • 线性结构:线性结构中的数据元素之间是一对一的关系。
      线性结构
    • 树形结构:树形结构中的数据元素之间存在一种一对多的层次关系。
      树形结构
    • 图形结构:图形结构的数据元素是多对多的关系。
      图形结构
  2. 物理结构(存储结构):是指数据的逻辑结构在计算机中的存储形式。

    物理结构又分为以下两种:

    • 顺序存储结构:是把数据元素存放在地址连续的存储单元里,其数据间的逻辑关系和物理关系是一致的。
    • 链式存储结构:是把数据元素存放在任意的存储单元里,这组存储单元可以是连续的,也可以是不连续的。
      链式存储结构

DataStruct

逻辑结构是一种抽象的结构,学过计算机组成的同学都知道,在程序运行的时候,数据是存储在内存中的,而内存中的基本存储单位就是存储单元,那我们如何在内存中表示逻辑结构呢?

这里就用到了物理结构,我们可以将物理结构理解成具体的,逻辑结构理解成抽象的,使用物理结构反应数据元素之间的逻辑关系,如何存储数据元素之间的逻辑关系,是实现物理结构的重点和难点。

数据元素之间的存储结构形式有两种:顺序存储和链式存储。我们主要使用这两种存储方式来反映数据元素的逻辑结构。

三、抽象数据类型

  • 数据类型:是一组性质相同的值的集合及定义在此集合上的一些操作的总称。

    又分下以下两种类型:

    • 原子类型:是不可以再分解的基本类型,包括整型、实型、字符型等。
    • 结构类型:由若干个类型组合而成,是可以再分解的。例如,整型数组是由若干个整型数据组成的。
  • 抽象数据类型(ADT):是指一个数学模型及其定义在该模型上的一组操作。

抽象数据类型:一个数据对象 + 数据对象中各数据元素的关系 + 数据元素的操作

从前面我们知道了数据对象是性质相同的数据元素的集合,这里的元素之间关系主要指的就是数据元素之间的逻辑结构和物理结构。

由上述的定义可知,抽象数据类型描述了数据结构的元素及其相关操作,通过抽象数据类型来实现具体的数据结构,也就是说抽象数据类型是数据结构的骨架。

例如线性表可以用抽象数据类型来表示,可以通过数组或链表来实现具体的线性表数据结构。

参考书籍:《大话数据结构》

自定义数据结构初探

从最基本的层面理解,数据结构是把一组相关的数据元素组织起来然后使用她们的策略和方法。C++运行用户以类的形式自定义数据类型,而库类型是语言自身定义的,类在C++中十分重要!尽管sales_item很简单,但要想给出其完整... 查看详情

delphilivebindings初探

DelphiLiveBindings初探 LiveBindings,顾名思义,动态绑定。1、绑定前: 2、点击数据源: 3、绑定连线:点击蓝色区域,按住鼠标左键,一直移动到绿色区域,然后松掉鼠标左键。 系统就完成了系统绑定: 然后,Lab... 查看详情

boostasio初探

一、简介BoostAsio(asynchronousinputandoutput)关注数据的异步输入输出。BoostAsio库提供了平台无关性的异步数据处理能力(当然它也支持同步数据处理)。一般的数据传输过程需要通过函数的返回值来判断数据传输是否成功,而BoostAsio... 查看详情

性能分析初探

...时应该查看是否有内存泄露、是否有对象使用了不合理的数据结构:(1)内存泄露可以借助MAT、Leakcanary等工具来分析定位;(2)不合理的数据结构需要针对内存占用排名靠前的类型进行 查看详情

初探数据结构

...最近开始学习JAVA中的集合框架,当看到链表、散列这些数据结构的时候,总有一些云里雾里的感觉。虽然JAVA集合框架中为我们封装好了绝大多数的常用基础数据结构,但知其然不知其所以然的感觉总是让人很不爽,所以接下来... 查看详情

java数据结构和算法初探

p.p1{margin:0.0px0.0px0.0px0.0px;font:14.0px"YuantiSC";color:#000000}p.p2{margin:0.0px0.0px0.0px0.0px;font:14.0px"YuantiSC";color:#000000;min-height:20.0px}//Datastructureandalgorithm 一、数据结构和算法&n 查看详情

初探indexeddb

IndexedDB是一种底层API,用于在客户端存储大量的结构化数据首先回顾一下前端储存数据常用的Cookie和WebStorageCookie是服务器发送到用户浏览器并保存在本地的一小块数据,它会在浏览器下次向同一服务器再发起请求时被携带并发... 查看详情

lucene初探之数据格式详情

Lucene初探之数据格式详情(三)今天,我们来了解一下Lucene的域的元数据信息—>.fnm。一个段包含多个域,每个域都存储一下元数据。fnm文件的详细数据格式大致如下:如同上面对段的信息的介绍一般,我们来一个... 查看详情

unityshader学习之旅-初探

UnityShader学习之旅-初探unity shader 图形图像 美丽的梦和美丽的诗一样都是可遇而不可求的——席慕蓉最简单的顶点片元着色器顶点片元着色器基本结构UnityShader基本结构:Shader,Properties,SubShder,Fallback等。结构 Shader"S... 查看详情

数据库之增删改查初探

插入数据:insertinto表名(列名1,列名2.........)values(值1,值2)如果插入多条数据则insertinto表名(列名1,列名2.........)values(值1,值2),(值1,值2)... 2.查询数据:select*from表名 //查询表中所有数据,其中*可以改为列名... 查看详情

初探pandas——安装和了解pandas数据结构(代码片段)

安装pandas通过pythonpip安装pandaspipinstallpandaspandas数据结构pandas常用数据结构包括:Series和DataFrameSeriesSeries是一种一维的数组型对象,包含一个值序列(与numpy中的数据类型相似),数据标签(称为索引(index))。importpandasaspd#创... 查看详情

初探ignite

Guava是一个很方便的本地缓存工具,但是在多节点处理的过程中,本地缓存无法满足数据一致性的问题。分布式缓存Ignite很好的解决了数据一致性,可靠性,事务性等方面的问题。Ignite支持分区方式和复制方式存储数据,侧重于... 查看详情

c结构体链表初探

结构体链表 1#include<stdio.h>2structtnode3{4char*word;5intcount;6structtnode*left;7structtnode*right;8};910intmain(intargc,charconst*argv[])11{1213structtnodea,b,c,*tmp;14a.word="a";15b.word="b" 查看详情

zookeeper初探

分布式编程中,网络中各个节点的数据同步,数据一致性保障,事务控制,容错控保障等都需要一个稳定可靠的协调服务。Zookeeper则是分布式程序中使用最广泛的协调服务技术。从前面的kafka,storm,ignite使用文章中我们可以看... 查看详情

数据采集方案初探

问题用户浏览网站、App或者小程序的基础行为(浏览、点击、搜索与收藏等)数据怎么采集?会话粒度的数据怎么获取?埋点与无埋点采集?背景数据采集是整个数据分析的前奏,直接关系到后续数据展现... 查看详情

lucene初探之数据格式详情(-)(代码片段)

Lucene初探之数据格式详情(-)在前两篇,我们介绍了Lucene的存储文件目录中的各个文件的大致关系。比如以层次规则保存的正向信息:索引–>段–>文档–>域–>词目录–>segment_N–>.fdx,.fdt–>.fnm–&... 查看详情

jvm初探之类文件结构

java的.class文件字节码如图:Class文件是一组以8字节为基础单位的二进制流,各个数据项目有着严格的结构。下面我们介绍下class文件的结构。魔数  class文件的头4个字节是魔数: ,他的作用便是验证这个文件是否是一个jav... 查看详情

.net中初探redis

一、简介Redis是著名的NOSQL数据库,本质就是存储键值对结构的数据,为存储键值对数据做了优化,在大型网站中应用很多。Redis提供了数据的自动过期处理,因此适合存储临时数据。 和Redis类似的还有Memcached,Redis可以把数... 查看详情