数据结构知识点汇总(持续更新版)

数据结构

一、绪论

检测知识:

1.1基本概念

以前的计算机

弹道计算机

现如今

主要运用于非数值的计算

  1. 基本概念和术语

    1. 数据:是信息的载体,描述客观事物属性的值,字符以及所有能输入到计算机中并被计算机程序识别和处理的符号的集合。数据是计算机程序加工的原料

    2. 数据元素:是数据的基本单位,通常作为整体进行考虑。

    3. 数据项:一个数据元素是有多个数据项组成,数据项构成数据元素的不可分割的最小的单位。
      1. 举例子

      2. 数据对象:

      3. 数据结构:数据元素之间的关系

      4. 数据类型:一个值的集合和定义再次集合上的操作的总称。

  2. 基本结构三要素

    增删改查等操作

    存储方式上

  3. 关键字:能够区分的数据项(6章)
     

    数据类型、抽象数据类型

    1. 逻辑结构

    2. 数据的运算

    3. 物理存储

  4. 抽象的数据结构就是完整的结构。

  5. 试题

    1. 什么可以定义完整的数据结构? 答案:抽象数据类型

    2. 以下数据中,( )是非线性的数据结构

  6. 解析

1.2算法和算法评价

  1. 算法

    1. 定义:求解问题的步骤

    2. 特性:

      1. 有穷性

      2. 确定性

      3. 可行性

      4. 输入

      5. 输出

      好算法的特性:

      正确:可以运行

      可读:注释

      健壮性:对非法数据进行处理

      高效率和低存储:快慢和低存储

  2. 算法效率的度量

    1. 时间复杂度

      1. 要排除与算法无关的

      2. 要实现提前预估时间

      3. 举例:

        多项相加的项只保留最高阶的项

        洛必达法则:

        直观感受

        常对幂指尖

      4. 思考

        练习:

    1. 空间复杂度

  3. 试题

  4. 答案

二、线性表

脉络图

线性表的基本操作

初始化表:InitList 初始化表 。构造一个空的线性表L,分配内存空间。

销毁表:DestrooyList(&L)。销毁线性表,并释放线性表L所占的内存空间。

插入线性表:ListInsert(&L,i,e)在第i个位置插入指定元素e

删除线性表:ListDelete(&L,i,&e)删除操作。删除表L中的第i个位置的元素,并用e返回删除的值。

按值查找:LocateElem(L,e)按照值查找,在表中查找具有给定关键字元素的值的元素。

按位查找:GetElem(L,i)获取表中第i个位置的元素的值。

常用其他操作

Length(L):求表长。返回线性表L的长度,即L中数据元素的个数。

PrintListL(L):输出操作。按前后顺序输出表中的所有的元素的值。

Empty(L):判断是否为空操作。若为空,则返回true,否则就返回false

Tips:

  1. 对数据的操作,无非就是----创建销毁、增删改查

  2. 函数的定义----<返回值类型>函数名(<参数1类型><参数2类型><参数3类型>)

  3. 开发需求,定义其他基本操作

  4. 函数名和参数形式命名方式

  5. 为什么要用到引用“&”----对参数的修改结果需要“带回来”,举例

     void test(int x){
         x=1024;
         printf("test函数内部 x = %d\n",x);
     }
     int main(){
         int x = 1;
         printf("在调用test函数之前x = %d",x);
         test(x);
         printf("在调用test函数之后x = %d\n",x);//不能把结果带回来
     }

    运行结果:

    引用“&”之后

     void test(int &x){
         x=1024;
         printf("test函数内部 x = %d\n",x);
     }
     int main(){
         int x = 1;
         printf("在调用test函数之前x = %d",x);
         test(x);
         printf("在调用test函数之后x = %d\n",x);
     }

    关键的地方

  6. 为什么需要实现对数据的操作

    1. 团队合作,封装

    2. 避免重复工作

    3. 想明白为什么

回顾:

1.单链表的定义

  1. 什么是单链表

    逻辑结构

    基本运算和操作

    顺序表L

    定义:用顺序存储的方式实现线性表的顺序存储。把逻辑上相邻的元素存储在物理上也相邻的存储单元中,元素之间的关系又存储单元的临接关系来体现。

    每个元素所占的空间是一样大的,n大于等于元素的有限序列。

    优点:可随机存取,存储密度高

    缺点:要求大片连续空间,改变容量不方便。

    问题:怎么知道数据元素的大小:sizeof

     typedef struct{
         int num;
         int people;
     }Customer;
     ​
         sizeof(int) = 4B
         sizeof(Customer) =8B
         一个汉字是2个字节:2B
         一个字符是1一个字节=1B 8bit
             
          
             

    顺序表的实现,静态分配

     #define MaxSize 10   //定义最大长度
     typedef struct{
         ElemType data[MaxSize];  //用静态的数组存放数据元素 一旦确定就不可以改变
         int length;//顺序表当前的长度 已经存了多少个元素
     }Sqllist;
     ​
     ​
     要给每个数据元素分配连续的存储空间,大小为:MaxSize*sizeof(ElmType)

    具体的代码----顺序表的初步实现

     #include <stdio.h>
     #define Maxsize 10
     ​
     ​
     //建结构体
     typedef struct{
         int data[MaxSize];
         int length;
     }SqList;//定义了一个SqList结构体,这个结构体最大长度为10,和存储了当前顺序表的长度
     ​
     ​
     //对结构体进行操作,初始化顺序表
     void InitList(SqList &L){
         for(int i =0;i<Maxsize;i++){
             L.data[i] = 0;//覆盖去除掉不干净的数据,让数组里面的原本的数据给替换掉,内存里面会有脏数据
         
         }
         L.length = 0;
     }
     ​
     //函数使用
     int main(){
         SqList L;//声明一个名为L的自定义数组
         InitList(L);//初始化表
         
         //尝试打印SqList中的数据元素,全部为0
         for(int i = 0;i <MaxSize;i++){
             printf("data[%d] = %d",i,data[i]);
         }
         
         system("pause");
         return 0;
     }
     ​

    会出现问题:数据满了怎么办?

    回答:放弃治疗,顺序表的长度在刚开始的时候就确定了就无法更改了

    问题:数据申明了很大的空间呢,存在什么问题

    回答:浪费了太多空间了

    单链表

    优点:不要求大片连续空间,改变容量方便

    缺点:不可随机存取,要消耗一定的空间存放指针。

    顺序表的动态分配----指针

    结构体指针

     #define InitSize 10
     typedef struct{
         ElemType *data; 
         int MaxSize;
         int length;
     }SqList;
     ​

    key:动态申请和释放空间 malloc、free函数 malloc会申请一整片的连续的存储空间 L.data = (ElemType) malloc(sizeof(ElemType)InitSize);

    动态分配

     #define InitSize 10 //默认最大长度
     typedef struct{
         int *data;
         int MaxSize;
         int length;
     }SqList;
     ​
     //初始化表
     void InitList(SqList &L){
         //用malloc函数申请一片连续的存储空间
         L.data = (int *)malloc(InitSize*sizeof(int));
         L.length = 0;
         L.MaxSize = InitSize;
     }
     ​
     //增加动态数组的长度
     void IncreaseSize(SqList &L ,int len){
         int *p = L.data;
         L.data = (int*)malloc(sizeof(int)*(L.Maxsize+len));
         for(int i = 0;i<L.length;i++){
             L.data[i] = p[i];
         }
         L.MaxSize = L.MaxSize + len;
         free(p);
     }
     ​
     int main(){
         SqList L;
         InitList(L);
         
         //对L表进行操作
         
         
         
         IncreaseSize(L,5);
         return 0;
         
     }

  2. 用代码定义单链表

     //节点
     struct LNode{
         ElemType data;
         struct Lnode *next;
     }

  3. 实现

    1. 带头结点

    2. 不带头结点

三、栈、队列和数组

四、串

五、数和二叉树

六、图

七、查找

八、排序

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/460608.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

vite打包流程和原理

文章目录 打包原理Vite比Webpack快&#xff1f;在生产环境下的表现启动项目后&#xff0c;完成加载比较慢&#xff1f;Esbuild & Rollup热更新 打包原理 vite利用了ES module这个特性&#xff0c;使用vite运行项目时&#xff0c;首先会用esbuild进行预构建&#xff0c;将所…

Java 根据IP获取IP地址信息(离线)

<!-- https://mvnrepository.com/artifact/org.lionsoul/ip2region --><dependency><groupId>org.lionsoul</groupId><artifactId>ip2region</artifactId><version>2.7.0</version></dependency> 地址&#xff1a;http…

影响交易收益的因素有哪些?

在尝试做交易时&#xff0c;你可能会问自己一个问题&#xff1a;交易一天能赚多少钱&#xff1f;“如果我全职投入交易&#xff0c;一天能赚多少&#xff1f;”或者更广泛地说&#xff0c;“交易能为我带来怎样的财富&#xff1f;”这些问题本质上都充满了不确定性&#xff0c;…

PCM和I2S区别

I2S和PCM接口都是数字音频接口&#xff0c;而所见的蓝牙到cpu以及codec的音频接口都是用PCM接口&#xff0c;是不是两个接口有各自不同的应用呢&#xff1f;先来看下概念。 PCM&#xff08;PCM-clock、PCM-sync、PCM-in、PCM-out&#xff09;脉冲编码调制&#xff0c;模拟语音信…

力扣L12--- 125验证回文串(java版)-2024年3月15日

1.题目 2.知识点 注1&#xff1a;在 Java 中&#xff0c;toString() 方法用于将对象转换为字符串表示形式。对于数组对象&#xff0c;toString() 方法将返回数组的字符串表示形式&#xff0c;其中包含数组中每个元素的字符串表示形式&#xff0c;以逗号分隔&#xff0c;并且包…

使用IDEA2023创建传统的JavaWeb项目并运行与调试

日期:2024-0312 作者:dusuanyun 文档环境说明: OS:Deepin 20.9(Linux) JDK: OpenJDK21 Tomcat:10.1.19 IDEA: 2023.3.4 (Ultimate Edition) 本文档默认已经安装JDK及环境变量的配置。 关键词…

【RPG Maker MV 仿新仙剑 战斗场景UI (四)】

RPG Maker MV 仿新仙剑 战斗场景UI 四 三级战斗指令菜单效果代码完成效果 下篇预告 三级战斗指令菜单 仙剑1中三级战斗的菜单内容如下&#xff1a;使用、投掷、装备这三项。 效果 在RMMV中原始菜单中是没有这三级菜单的&#xff0c;因此需要重新进行添加进去。 代码 这里贴…

量子遗传算法优化VMD参数,五种适应度函数任意切换,最小包络熵、样本熵、信息熵、排列熵、排列熵/互信息熵...

关于量子遗传算法&#xff0c;在众多文献均有应用。下面简述一下原理。 &#xff08;1&#xff09;量子比特编码 子遗传算法通过引入量子比特来完成基因的存储和表达。量子比特是量子信息中的概念&#xff0c;它与经典比特不同&#xff0c;是因为它可以在同一时刻处于两个状态的…

Leet code 438 找到字符串中所有字母异位词

解题思路&#xff1a;滑动窗口 三步走 进窗口 判断 出窗口 然后更新结果 定义两个hash表在第一个表中存 p的有效字符 比如 abc a一个 b一个 c一个 这样就存在三个有效字符 在第二个hash表中进行滑动窗口的运行 定义一个常量count 如果滑动窗口中有效字符存在一个就…

string模拟实现

前言 上一期我们对STL进行了简单的介绍以及学习了string常用API的基本使用&#xff01;本期我们来探索它的底层实现&#xff01;自己对string的常用的接口进行模拟实现&#xff01; 本期内容介绍 常用成员函数模拟实现 常用非成员函数模拟实现 成员函数 构造函数 在进行模拟…

计算机网络 谢希仁(001-2)

计算机网络-方老师 总时长 24:45:00 共50个视频&#xff0c;6个模块 此文章包含1.5到1.7的内容 1.5计算机网络类别 连通 共享 分类方法 广域网是边缘部分和核心部分的核心部分 以前是拨号连接 现在是光纤 总线型 星型 环形网 1.6计算机网络的性能 带上单位之后就不是…

git bash 命令行反应慢、卡顿(定位出根本原因)

参考该博主&#xff1a; https://blog.csdn.net/weixin_50212044/article/details/131575987?utm_mediumdistribute.pc_relevant.none-task-blog-2defaultbaidujs_baidulandingword~default-0-131575987-blog-130024908.235v43pc_blog_bottom_relevance_base4&spm1001.210…

IP证书有什么作用?怎么申请?

关于IP地址证书&#xff0c;它的主要作用有这么几个点&#xff1a; 1.验明正身&#xff1a;就像身份证一样&#xff0c;它可以证明某个服务器的IP地址是真的、合法的&#xff0c;让咱知道咱们连接的就是正确的服务器&#xff0c;而不是冒牌货。这样一来&#xff0c;就可以降低像…

使用OpenCV实现人脸特征点检测与实时表情识别

引言&#xff1a; 本文介绍了如何利用OpenCV库实现人脸特征点检测&#xff0c;并进一步实现实时表情识别的案例。首先&#xff0c;通过OpenCV的Dlib库进行人脸特征点的定位&#xff0c;然后基于特征点的变化来识别不同的表情。这种方法不仅准确度高&#xff0c;而且实时性好&am…

塑料工厂5G智能制造数字孪生可视化平台,推进塑料行业数字化转型

塑料工厂5G智能制造数字孪生可视化平台&#xff0c;推进塑料行业数字化转型。塑料制造行业作为重要的工业领域&#xff0c;亟需借助这一平台实现产业升级与转型&#xff0c;以适应市场的变化和提高生产效率。传统的塑料制造过程往往存在生产效率低下、资源浪费、环境污染等问题…

鸿蒙车载原生开发,拓展新版图

一天内连发“五弹”、HiCar 4.0首次上车 华为鸿蒙狂扩“汽车朋友圈”-上游新闻 汇聚向上的力量 3月15日&#xff0c;在“华为云&华为终端云服务创新峰会2024”上&#xff0c;华为首批汽车行业伙伴广汽传祺、岚图汽车、零跑汽车、凯翼汽车加入鸿蒙生态合作&#xff0c;华为…

Python - 应用篇 :ChatGPT +Pycharm 序列号自动生成

前言&#xff1a; 客户要求在产品外壳上新增可追溯的二维码贴花&#xff0c;二维码信息内容如下&#xff1a; 编码格式&#xff1a;SBD 零部件代码 控制盒序列号 控制盒厂家 例如&#xff1a;[)>06P725-18428S24031410001ZJL SBD 零部件代码&#xff1a;[)>06P725-184…

考研复习C语言进阶(3)

结构体 1 结构体的声明 1.1 结构的基础知识 结构是一些值的集合&#xff0c;这些值称为成员变量。结构的每个成员可以是不同类型的变量。 1.2 结构的声明 struct tag { member-list; }variable-list; 例如描述一个学生&#xff1a; struct Stu { char name[20];//名字 int ag…

java-ssm-jsp-基于java的客户管理系统的设计与实现

java-ssm-jsp-基于java的客户管理系统的设计与实现 获取源码——》公主号&#xff1a;计算机专业毕设大全

Spring Cloud Gateway针对指定接口做响应超时时间限制

背景&#xff1a;我做的这个服务中存在要对大数据量做自定义统计的接口和大文件上传接口&#xff0c;接口响应用时会超过gateWay配置的全局用时&#xff0c;如果调整网关全局的超时时间和服务的全局超时时间是不合理的&#xff0c;故此想能否单独针对某个接口进行细粒度超时限制…