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

数据结构

一、绪论

检测知识:

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) = 4Bsizeof(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中的数据元素,全部为0for(int i = 0;i <MaxSize;i++){printf("data[%d] = %d",i,data[i]);}system("pause");return 0;}​

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

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

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

    回答:浪费了太多空间了

    单链表

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

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

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

    结构体指针

     #define InitSize 10typedef 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. 不带头结点

三、栈、队列和数组

四、串

五、数和二叉树

六、图

七、查找

八、排序

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何搭建“Docker Registry私有仓库,在CentOS7”?

1、下载镜像Docker Registry docker pull registry:2.7.1 2、运行私有库Registry docker run -d -p 5000:5000 -v ${PWD}/registry:/var/lib/registry --restartalways --name registry registry:2.7.1 3、拉取镜像 docker pull busybox 4、打标签&#xff0c;修改IP&#x…

原创 | 一文读懂高斯过程

作者&#xff1a;贾恩东 本文约2700字&#xff0c;建议阅读9分钟 本文将使用通俗易懂的语言引导读者入门高斯过程。 高斯过程&#xff08;Gaussian Process&#xff09;是机器学习中一个相当基础的概念&#xff0c;本文中笔者将使用通俗的语言让读者入门高斯过程。 高斯过程&am…

Python之Web开发中级教程----创建Django子应用

Python之Web开发中级教程----创建Django子应用 基于上一个教程的Django项目&#xff08;可以先看上一集&#xff0c;链接如下&#xff1a;&#xff09; https://mp.csdn.net/mp_blog/creation/editor/136724897 2.创建子应用 python manager.py startapp book admin.py&…

FPGA静态时序分析与约束(三)、读懂vivado时序报告

系列文章目录 FPGA静态时序分析与约束&#xff08;一&#xff09;、理解亚稳态 FPGA静态时序分析与约束&#xff08;二&#xff09;、时序分析 文章目录 系列文章目录前言一、时序分析回顾二、打开vivado任意工程2.1 工程布局路由成功后&#xff0c;点击vivado左侧**IMPLEMENT…

Oracle 19c 傻瓜式安装

1.创建用户和组&#xff1a; /usr/sbin/groupadd -g 54321 oinstall /usr/sbin/groupadd -g 54322 dba /usr/sbin/groupadd -g 54323 oper /usr/sbin/useradd -u 54321 -g oinstall -G dba,oper oracle 2.给oracle设置密码 passwd oracle 3.关闭防火墙和selinux systemctl s…

❤ css布局篇

❤ css布局篇 一、基础布局 &#xff08;1&#xff09;居中布局 ① 文字居中 <div class"div1">测试文字居中</div> body {margin: 0;padding: 0;padding: 10%; } .div1 {width: 100px;height: 100px;background: cadetblue;text-align: center; }te…

easyexcel读和写excel

请直接看原文: JAVA使用easyexcel操作Excel-CSDN博客 -------------------------------------------------------------------------------------------------------------------------------- 之前写过一篇《JAVA操作Excel》&#xff0c;介绍了jxl和poi读写Excel的实现&am…

C语言-写一个简单的Web服务器(三)

上次我们研究了如何将解析web前端的请求&#xff0c;本次内容里我们将服务器的内容响应到前端&#xff0c;让浏览器展示。 响应数据到前端 服务器将数据响应到前端有其必要的返回数据&#xff0c;其结构如下&#xff0c;中间\r\n为换行&#xff0c;这个在不同系统&#xff08;w…

SRS-220VDC-4Z-10A静态中间继电器 额定电压DC220V 四副转换触点 JOSEF约瑟

系列型号&#xff1a; SRS-24VDC-4Z-8A静态中间继电器&#xff1b;SRS-24VDC-4Z-10A静态中间继电器&#xff1b; SRS-24VDC-4Z-16A静态中间继电器&#xff1b;SRS-24VAC-4Z-8A静态中间继电器&#xff1b; SRS-24VAC-4Z-10A静态中间继电器&#xff1b;SRS-24VAC-4Z-16A静态中…

Gitee 实战配置

一、Gitee 注册帐号 官网&#xff1a;https://gitee.com点击注册按钮。填写姓名。填写手机号。填写密码。点击立即注册按钮 二、安装GIT获取公钥 1.官网下载git下载地址&#xff1a;https://git-scm.com/download/win 2.安装git&#xff0c;双击运行程序&#xff0c;然后一直下…

Ubuntu虚拟磁盘扩容

1、打开VMware 2、第二步&#xff1a;启动虚拟机后&#xff0c;安装gparted工具&#xff1a;sudo apt-get install gparted 3、第三步&#xff1a;查看设备disk自带工具 4、第四步&#xff1a;选项已经存在的/dev/sda2磁盘&#xff1a;从左到右进行操作“resize” 5、重启…

【MySQL】3. 库的操作

库的操作 1. 创建数据库 语法&#xff1a; CREATE DATABASE [IF NOT EXISTS] db_name [create_specification [,create_specification] ...]create_specification:[DEFAULT] CHARACTER SET charset_name[DEFAULT] COLLATE collation_name说明&#xff1a; 大写的表示关键字 …

因聚而生 数智有为丨软通动力携子公司鸿湖万联亮相华为中国合作伙伴大会2024

3月14日&#xff0c;以“因聚而生 数智有为”为主题的“华为中国合作伙伴大会2024”在深圳隆重开幕。作为华为的重要合作伙伴和本次大会钻石级&#xff08;最高级&#xff09;合作伙伴&#xff0c;软通动力深度参与本次盛会&#xff0c;携前沿数智化技术成果和与华为的联合解决…

数据资产管理解决方案:构建高效、安全的数据生态体系

在数字化时代&#xff0c;数据已成为企业最重要的资产之一。然而&#xff0c;如何有效管理和利用这些数据资产&#xff0c;却是许多企业面临的难题。本文将详细介绍数据资产管理解决方案&#xff0c;帮助企业构建高效、安全的数据生态体系。 一、引言 在信息化浪潮的推动下&a…

移动云COCA架构实现算力跃升,探索人工智能新未来

近期&#xff0c;随着OpenAI正式发布首款文生视频模型Sora&#xff0c;标志着人工智能大模型在视频生成领域有了重大飞跃。Sora模型不仅能够生成逼真的视频内容&#xff0c;还能够模拟物理世界中的物体运动与交互&#xff0c;其核心在于其能够处理和生成具有复杂动态与空间关系…

【学习】感受野

感受野&#xff08;receptive field&#xff09;是指在神经网络中&#xff0c;某一层输出的特征图上的一个像素点对应输入图像的区域大小。在深度神经网络中&#xff0c;随着网络层数的增加&#xff0c;特征图的感受野也会逐渐增大。这是因为每一层的卷积操作都会扩大感受野。 …

nginx gzip性能优化 —— 筑梦之路

对比使用和不使用gzip static处理 1. 不使用 gzip static 时的 gzip 处理 如果你不使用 gzip_static 而只是 "gzip on"&#xff0c;它每次都会被压缩并发送。 虽然它实际上可能缓存在内存中&#xff0c;但传统观点是 "每次都会执行压缩处理&#xff0c;因此 CP…

机器学习 --- 模型评估、选择与验证

Java实训代码、答案&#xff0c;如果能够帮到您&#xff0c;希望可以点个赞&#xff01;&#xff01;&#xff01; 如果有问题可以csdn私聊或评论&#xff01;&#xff01;&#xff01;感谢您的支持 第1关&#xff1a;为什么要有训练集与测试集 1、下面正确的是&#xff1f;&…

人机交互三原则,网络7层和对应的设备、公钥私钥

人机交互三原则 heo Mandel提出了人机交互的三个黄金原则&#xff0c;它们强调了相似的设计目标&#xff0c;分别是&#xff1a; 简单总结为&#xff1a;控负持面–>空腹吃面 1&#xff0c;用户控制 2&#xff0c;减轻负担 3&#xff0c;保持界面一致 置用户于控制之下&a…

【Maven学习笔记】Maven入门教程(适合新手反复观看学习)

Maven学习笔记 Maven的简要介绍Maven的安装和配置Maven的安装Maven安装的常用配置 Maven的使用入门编写pom编写主代码编写测试代码打包和运行使用Archetype生成项目骨架 Maven核心概念的阐述坐标案例分析依赖依赖的范围传递性依赖依赖范围依赖调节可选依赖Maven依赖常用的技巧 …