首页 > 其他分享 >数据结构基本概念和术语

数据结构基本概念和术语

时间:2024-08-15 23:16:23浏览次数:13  
标签:存储 结点 术语 算法 复杂度 数据结构 数据 基本概念 结构

概论

1.1 基本概念和术语

1.1.1 基本概念

计算机处理的的是数值性数据,当计算机处理用户信息表中的数据的时候,需要弄清3个问题

1.数据的逻辑结构

数据之间存在怎样的内在联系,数据中,有且只有一个是首节点/尾结点,其他节点有且只有一个相邻的位于它之前和之后的结点

2.数据的存储结构

数据在计算机的存储方式称为存储结构。在C语言中,最常见的是用结构数组来存储整个用户的信息表,每一个结构数组元素也是一个结构,用于表示信息用户的一个结点。用户信息表中相邻的结点,对应结构数组中的元素也是连续的,在这种存储方式下,逻辑相邻的结点就必须是物理相邻,被称为顺序存储,还有其他存储方式。

3.数据的运算合集

对数据的存储一定会涉及到相关的运算。在用户的信息表中,可以进行删除一个用户、增加有一个用户、查找某个用户。应该明确指出这些操作的含义。为一批数据定义的所有运算(或称操作)构成一个运算(操作)集合。

数据结构就是按照一定的逻辑结构组成的一批数据,使用某种存储方式将数据存储在计算机中,并在这些数据上定义了一个运算集合

1.1.2数据的逻辑结构(数据结构)

数据的逻辑结构是数据与数据之间存在的逻辑关系,用一个二元组来表示
$$
B=(K,R)\K代表数据(结点的有限集合),R是集合K上关系的有限集合
$$
例如:5个人,a,b,c,d,e,a是b的父亲,b是c的父亲,c是d的父亲,d是e的父亲,讨论它们之间的父子关系,可以表达为B=(K,R),其中K={a,b,c,d,e},R={r},r={<a,b>,<b,c>,<c,d>,<d,e>}.

也可以用图形表示

ki∈K,Kj∈K,<ki,kj>∈r,ki是kj的前驱,kj是ki的后继。

若某个结点没有前驱,就是开始结点;没有后继结点,就是终端结点;既不是开始也不是终端的为内部结点。

线性结构:一个前驱,一个后继

树型结构:一个前驱,多个后继

图型结构:多个前驱,多个后继

1.1.3数据的存储结构

数据的逻辑结构是独立于计算机的,与在计算机中的存储是无关的,要对数据进行处理,就必须对数据进行存储,数据的存储结构主要有4种存储方式

(1)顺序存储

通常存储线性结构的数据,使逻辑相邻的结点一定是物理位置相邻

(2)链式存储

给每一个结点附加一个指针段,指的是该结点的后继存储地址,一个结点可以有一个后继,也可以有多个后继,所以可以有一个指针域,也可以有多个指针,逻辑相邻的结点在存储区域中可以不是物理相邻。

(3)索引存储

线性结构中,以开始结点为索引号1,其他结点的索引号依次加1,每个结点都有唯一的索引号,根据索引号确定存储地址。

(4)散列存储

构造一个从集合K到存储区域M的函数h,定义域为K,值域为M,存储地址由h(Ki)决定

一个数据结构存储在计算机中,整个数据所占的存储空间不一定小于数据本身所占的存储空间,通常把数据本身所占的存储空间和整个数据结构所占的存储空间的大小的比值叫做存储密度,显然,数据结构的存储密度不大于1,线性结构存储密度为1,链式结构小于1。

1.2 数据类型和抽象数据类型

1.2.1数据类型

数据类型(简称类型)反映了数据的取值范围以及这类数据可以施加的运算。一个数据类型就是同一类数据的全体,是数据的一种属性,规定了数据的可变化范围,

1.2.2抽象数据类型

这是一种和表示无关的数据类型,是一个数据模型及定义在该模型的一组运算,定义一个抽象数据类型时,必须给出它的名字及运算符名,及函数名,并规定参数性质。(c++中的类支持抽象数据类型)

简言说明,就是自定义类型。

1.3算法和算法分析

解决某个问题的方法和步骤就叫做算法

特征

(1)有穷性:算法执行要在有限步内进行

(2)确定性:每个步骤是确定的,无二义性

(3)输入:可以有0个或多个输入

(4)输出:一定有输出结果

(5)可行性:每一个步骤都是可行的

1.3.1时间复杂度和空间复杂度

一个算法和优劣是从算法的执行时间和所用的存储空间两个方面衡量的。

(1)时间复杂度

由于算法在不同机器上执行时间不同,资源占用情况也不一样。所以时间复杂度使用算法执行过程中的基本操作次数来衡量的,使用大O渐进表示(O()),在评价算法的时间复杂度时,只关系算法的本质区别,不考虑细小区别。

常数阶 31 O(1)

线性阶 2*n+17 O(n)

平方阶 n^2+10 O(n^2)

立方阶 2*n^3 O(n^3)

常见的算法时间复杂度

O(1)<O(log n)<O(n)<O(n*log n)<O(n2)<O(n3)<……<O(2^n)

(2)空间复杂度

除了数据以外附加的存储空间,度量方法与时间复杂度类似

标签:存储,结点,术语,算法,复杂度,数据结构,数据,基本概念,结构
From: https://www.cnblogs.com/likio/p/18362037

相关文章

  • Redis数据结构ZipList详解、ZipList的连锁更新问题
    ZipListZipList是一种特殊的“双端链表”,由一系列特殊编码的连续内存块组成。可以在任意一端进行压入/弹出操作,并且该操作的时间复杂度为O(1)。属性类型长度用途zlbytesuint32_t4字节记录整个压缩列表占用的内存字节数zltailuint32_t4字节记录压缩列表表尾节点距离压......
  • Redis数据结构:动态字符串SDS、Intset、Dict详解
    动态字符串:我们都知道Redis中保存的Key是字符串,value往往是字符串或者字符串的集合。可见字符串是Redis中最常用的一种数据结构。不过Redis没有直接使用C语言中的字符串,因为C语言字符串存在很多问题:获取字符串长度的需要通过运算非二进制安全不可修改Redis构建了一种新的......
  • 数据结构(一)
    目录1. 链表(LinkedList)链表的基本类型链表的基本操作链表的C语言实现示例(单向链表)链表的时间复杂度链表的空间复杂度2.栈(Stack)栈的基本操作栈的实现栈的应用场景示例:中缀表达式转后缀表达式(逆波兰表达式)3.队列队列应用场景1. 链表(LinkedList)链表是一......
  • 数据结构
    数据结构莫队intn,m;/*====================*/intS;structQuery{ intl,r,idx; Query(int_l=0,int_r=0,int_idx=0) { l=_l,r=_r,idx=_idx; } friendbooloperator<(constQuery&a,constQuery&b) { return(a.l/S==b.l......
  • 【数据结构】TreeMap和TreeSet
    目录前言TreeMap实现的接口内部类常用方法TreeSet实现的接口常用方法前言Map和set是一种专门用来进行搜索的容器或者数据结构,其搜索的效率与其具体的实例化子类有关。一般把搜索的数据称为关键字(Key),和关键字对应的称为值(Value),将其称之为Key-value的键值对。......
  • 知识改变命运 数据结构【顺序表】
    1.线性表线性表(linearlist)是n个具有相同特性的数据元素的有限序列。线性表是一种在实际中广泛使用的数据结构,常见的线性表:顺序表、链表、栈、队列…线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是连续的,线性表在物理上存储时,通常以数组......
  • 高阶数据结构(Java):AVL树插入机制的探索
    目录1、概念1.1什么是AVL树2.1平衡因子3、AVL树节点的定义4、AVL树的插入机制4.1初步插入节点4.2更新平衡因子4.3 提升右树高度4.3.1右单旋4.3.2左右双旋4.4 提升左树高度4.4.1左单旋 4.4.2右左双旋5、AVL树的验证6、AVL树的删除1、概念1.1什......
  • 【机器学习】CNN卷积神经网络算法的基本概念、训练过程(含python代码)和应用领域
    引言卷积神经网络(ConvolutionalNeuralNetwork,CNN)是一种深度学习模型,主要用于图像识别、图像分类、物体检测和计算机视觉等领域文章目录引言一、卷积神经网络(ConvolutionalNeuralNetwork,CNN)1.1基本原理1.2主要结构1.2.1卷积层(ConvolutionalLayer)1.2.2激活函......
  • 【数据结构】详细介绍线性表中的顺序表,带你复盘实现细节,附上顺序表编程练习题
    目录一.线性表二.顺序表 1.静态顺序表与动态顺序表2.动态顺序表的接口实现 2.1顺序表初始化 2.2判断是否需要扩容  2.3 顺序表指定位置插入2.4 顺序表头插2.5 顺序表尾插2.6 顺序表指定位置删除2.7 顺序表头删2.8 顺序表尾删2.9 顺序表查找2.1......
  • 数据结构之链表超详解(1)
     一人我饮酒醉醉把佳人成双对两眼是独相随只求他日能双归娇女我轻扶琴燕嬉我紫竹林痴情红颜心甘情愿千里把你寻说红颜我痴情笑曲动我琴声妙轻狂高傲懵懂无知只怪太年少弃江山我忘天下斩断情丝无牵挂千古留名传佳话我两年征战已白发一生征战何人陪谁是谁非谁相随戎马一......