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

数据结构

一、绪论

检测知识:

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…

java用modbus4j的RTU去操作那些寄存器(线圈,保持,输入,离散输入寄存器)

目录 java用modbus4j的RTU去操作那些寄存器1. modbus-RTU-java操作读线圈寄存器2. modbus-RTU-java操作写线圈寄存器3. modbus-RTU-java操作读保持寄存器4. modbus-RTU-java操作写保持寄存器5. modbus-RTU-java操作读离散输入寄存器6. modbus-RTU-java操作读输入寄存器 java用m…

重置(resetting)CSS 和 标准化(normalizing)CSS 的区别是什么?你会选择哪种方式,为什么?

重置&#xff08;resetting&#xff09;CSS 和标准化&#xff08;normalizing&#xff09;CSS 是两种不同的方法来处理浏览器默认样式的差异。 重置CSS是指将浏览器默认样式重置为一致的样式&#xff0c;以避免浏览器默认样式对网页布局和设计的影响。重置CSS会将所有元素的样…

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…

信也科技发布消费者权益保护2023年度报告: 科技驱动、服务为先、合作共建社会化消保体系

3月15日消费者权益日当天&#xff0c;信也科技发布《消费者权益保护2023年度报告》&#xff08;下称《报告》&#xff0c;消费者权益保护简称“消保”&#xff09;。该报告为信也科技消保委员会成立后首份公开披露的消保工作年度总结。《报告》显示&#xff0c;信也科技通过智能…

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;然后一直下…

小程序学习4 mock

services/home.js import { config, cdnBase } from ../../config/index;/** 获取首页数据 */ function mockFetchHome() {const { delay } require(../_utils/delay);const { genSwiperImageList } require(../../model/swiper);return delay().then(() > {return {swip…

代码规范工具

pip install pre-commit然后可以在代码仓里面配置pre-commit pre-commit install这样子代码检查的规范的执行就会注册在git的hook当中 然后可以在pre-commit的config里面配置需要的代码规范&#xff1b; 有些规范可以帮你修改&#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、重启…

【Java基础】JVM双亲委派模型

一、什么是JVM的双亲委派模型&#xff1f; 双亲委派模型是类加载器的一种工作机制&#xff0c;是Java设计者为了保证类的安全性和一致性而提出的一种规则(可以理解为类加载器为了加载类时保证类的安全性和一致性而设计的一种规则)。此规则的定义如下&#xff1a; 1、类加载器接…

常量指针,指针常量;函数指针,指针函数;指针数组,数组指针 一文全解!带示例

前言&#xff1a; 最近准备面试&#xff0c;准备把这几个乱人心智的概念一网打尽&#xff0c;顺便记录一下~ 常量指针&#xff0c;指针常量&#xff1a; 且看下面的这些&#xff1a; const int a; int const a; const int *a; int* const a; int const *a const;//带两个con…

【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;携前沿数智化技术成果和与华为的联合解决…