首页 > 编程语言 >【数据结构与算法—基础篇1】

【数据结构与算法—基础篇1】

时间:2024-07-24 09:56:16浏览次数:10  
标签:存储 复杂度 元素 基础 链表 算法 数据结构 数据

1、基础知识

1、数据结构三要素:逻辑结构、存储结构、数据的运算;其中逻辑结构包括线性结构(线性表、栈、队列)和非线性结构(树、图、集合)

2、数据是信息的载体,是描述客观事物属性的数、字符及所有能输入到计算机中并被计算机程序识别和处理的符号的集合。

3、数据元素是数据的基本单位,可由若干数据项组成,数据项是构成数据元素的不可分割的最小单位

4、数据对象是具有相同性质的数据元素的集合,是数据的一个子集

5、数据类型是一个值的集合和定义在此集合上的一组操作的总称

6、数据类型包括:原子类型、结构类型、抽象数据类型

7、数据结构是相互之间存在一种或多种特定关系的数据元素的集合,它包括逻辑结构、存储结构和数据运算三方面内容

8、数据的逻辑结构和存储结构是密不可分的,算法的设计取决于所选定的逻辑结构,而算法的实现依赖于采用的存储结构

9、数据的存储结构主要有顺序存储、链式存储、索引存储和散列存储

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

11、在存储数据时,通常不仅要存储各数据元素的值,而且要存储数据元素之间的关系

12、对于两种不同的数据结构,逻辑结构或物理结构一定不同吗? 数据运算也是数据结构的一个重要方面。对于两种不同的数据结构,他们的逻辑结构和物理结构完全有可能相同(比如二叉树和二叉排序树)

13、链式存储设计时,各个不同结点的存储空间可以不连续,但结点内的存储单元地址必须连续

14、算法是对特定问题求解步骤的一种描述,它是指令的有限序列,其中每条指令包括一个或多个操作。

15、算法的五个特性:有穷性、确定性、可行性、输入、输出

16、通常设计一个好的算法应考虑:正确性、可读性、健壮性、效率与低存储量需求

17、算法的时间复杂度不仅依赖于问题的规模n,也取决于待输入数据的性质

18、若输入数据所占空间只取决于问题本身而和算法无关,则只需分析除输入和程序之外的额外空间

19、算法原地工作是指算法所需辅助空间为常量,即O(1)

20、一个算法应该是问题求解步骤的描述

21、所谓时间复杂度,是指最欢情况下估算算法执行时间的一个上界

22、同一个算法,实现语言的级别越高,执行效率越低

23、空间复杂度是对一个算法在运行过程中额外占用存储空间大小的度量。空间复杂度不是程序占用了多少bytes的空间,空间复杂度算的是变量的个数。

2、线性表(顺序表和链表)

顺序表(Sequential List): 顺序表是一种连续的存储结构,数据元素在内存中占据一块连续的存储空间。它可以通过下标来直接访问元素,因此支持随机访问。顺序表可以使用数组来实现,每个元素占据固定大小的内存空间。
优点:

随机访问性能好:由于顺序表的元素在内存中连续存储,可以通过下标直接访问元素,因此随机访问的时间复杂度为O(1)。 存储效率高:顺序表不需要额外的存储空间来存储指针,只需要存储元素本身,因此相对于链表来说,存储效率较高。

缺点:

插入和删除操作复杂:由于顺序表是连续存储的,当需要插入或删除元素时,需要移动其他元素来腾出空间或填补空缺,因此时间复杂度为O(n),其中n是元素的个数。 存储空间固定:顺序表在初始化时需要指定固定大小的存储空间,如果元素数量超过了预设的大小,需要进行扩容操作,这可能导致时间和空间的浪费。

链表(Linked List): 链表是一种离散的存储结构,数据元素存储在称为节点的单元中,每个节点包含数据和指向下一个节点的指针。通过链接各个节点,形成数据的逻辑顺序。
优点:

插入和删除操作简单:由于链表的节点通过指针链接,插入和删除操作只需要修改指针的指向,不需要移动其他元素,因此时间复杂度为O(1)。 灵活使用内存空间:链表可以根据实际情况动态分配内存空间,只需要在插入新节点时分配新的内存,因此避免了固定大小的存储空间的限制。

缺点:

随机访问性能差:由于链表中的元素并不连续存储,访问元素需要通过指针依次遍历,因此随机访问的时间复杂度为O(n),其中n是元素的个数。 需要额外的存储空间:链表的每个节点需要额外的指针来指向下一个节点,这样会占用额外的存储空间,相对于顺序表来说,存储效率较低。 顺序表适用于需要频繁进行随机访问的场景,而链表适用于频繁进行插入和删除操作的场景。

标签:存储,复杂度,元素,基础,链表,算法,数据结构,数据
From: https://blog.csdn.net/m0_46479109/article/details/140654820

相关文章

  • AJAX基础知识
    1.AJAX1.什么是AJAX​AsynchronousJavascriptAndXml​异步的JS和xml(EXtensibleMarkupLanguage)​通过JS异步的向服务器发送请求并接收响应数据​同步访问:​当客户端向服务器发送请求时,服务器在处理的过程中,浏览器只能等待,效率较低​异步访问:​当......
  • 【算法专题】双指针算法之611. 有效三角形的个数(力扣)
    欢迎来到CILMY23的博客......
  • 【算法专题】双指针算法之LCR 179. 查找总价格为目标值的两个商品(力扣)
     欢迎来到CILMY23的博客......
  • redis原理之底层数据结构-跳表
    1.什么是跳表1.1链表及其不足链表是在程序设计中最常见的数据结构之一,它通过指针将多个链表节点连接起来,这样就可以将逻辑上同一类的数据存储到不连续的内存空间上。链表结构如下:但是链表有一个问题,就是当链表需要查询一个元素的时候,需要从链表头部开始遍历,时间复杂度为o(......
  • 《专题》numpy科学计算基础库——精细化讲解 <1>
    一、什么是numpy库        Numpy(NumericalPython)是科学计算基础库,提供大量科学计算相关功能,比如数据统计,随机数生成等。其提供最核心类型为多维数组类型(ndarray),支持大量的维度数组与矩阵运算,Numpy支持向量处理ndarray对象,提高程序运算速度。二、安装numpy库1......
  • 《专题》numpy科学计算基础库——精细化讲解 <2>
    续接上集:1、reshape函数:重塑数组的形状    改变数组的维度        其语法为numpy.reshape(arr,newshape,order='C')如下图所示        首先生成一个1到17不包括17的16个元素的数组,然后对这个数组进行重塑,使其成为4行4列的二维数组,注意:此处......
  • 通讯录管理系统(C++基础知识实现)
    通讯录管理系统描述:本人C++小白一枚,正在学习C++基础知识,给大家分享一款使用C++基础知识实现的通讯录管理系统,一起努力进步,大佬轻点喷。1.知识点(1)预处理器指令(#include,#define);(2)命名空间使用(usingnamespacestd;);(3)函数定义:定义了多个函数,如menu,addContact,show......
  • 昇思25天学习打卡营第20天|K近邻算法实现红酒聚类
    K近邻算法实现红酒聚类实验目的K近邻算法原理介绍分类问题回归问题距离的定义实验环境数据处理数据准备数据读取与处理模型构建--计算距离模型预测实验小结本实验主要介绍使用MindSpore在部分wine数据集上进行KNN实验。实验目的了解KNN的基本概念;了解如何使用Mind......
  • 《Java初阶数据结构》----3.<线性表---LinkedList与链表>
    目录前言一、链表的简介1.1链表的概念1.2链表的八种结构 重点掌握两种1.3单链表的常见方法三、单链表的模拟实现四、LinkedList的模拟实现(双链表)4.1 什么是LinkedList4.2LinkedList的使用五、ArrayList和LinkedList的区别 前言   大家好,我目前在学习......
  • Python基础-Anaconda,Spyder,数据类型
    1、Python与Anaconda在想使用Python之前需先安装Python,以及PythonIDE和Python的库,而用Anaconda就可以一键安装。Anaconda包含了Python,常用的python库以及IDE,还具有强大的环境和python包的管理能力。PythonIDE(IntegratedDevelopmentEnvironment,集成开发环境)是一个为开发......