数据结构=逻辑结构+物理结构(存储结构),数据结构是计算机中存储、组织数据的方式。
其中物理结构是数据的逻辑结构在计算机中的存储形式。而存储器针对内存而言,像硬盘、软盘、光盘等外部存储器的数据组织常用文件结构描述。
在这里插入图片描述

1. 基础算法

1.1 递归Recursion

  1. 函数在定义中使用函数自身的方法,例子是求斐波那契数列。
    long long Fib(int i) {if(i<=1) return i;return Fib(i-1)+Fib(i-2);
    }
    

1.2 分治Divide and Conquer

分治,即分而治之。☞将大问题分成几个小部分计算,最后再将小部分结果合并起来

  1. 要考虑什么时候是基础情况,很多时候依靠递归实现
int RecSum(int l, int r) {int mid = l + r >> 1; // 因为这里是位运算,相当于整数除以2;该写法常见于二分查找、分治算法等腰计算中间值return RecSum(l,mid)+RecSum(mid+l, r);
}

这段代码是递归求和函数,但因为没有终止条件会导致无限递归和栈溢出(stack overflow)。即没有处理l==r的情况,修正后

int RecSum(int l, int r) {if (l==r) return l;int mid = 
}

1.3 贪心算法

  1. 基本思想
    1)求解最优化问题的算法包含一系列步骤
    2)每一步都有一组选择
    3)做出当前最好的选择
    4)通过局部最优选择达到全局最优-> 未必达到全局最优
    5)是否能达到最优解需严格证明
  2. 产生最优解的条件
    1)最优子结构:
    2)贪心选择性:

2. 线性表

数据的存储结构应正确反映数据元素间的逻辑关系
体现为线性表的顺序存储能用数据实现,而元素物理
1)个数有限;2)元素有先后次序;3)数据类型相同;4)讨论元素间的逻辑关系
一旦数据被线性表存储,在逻辑上的相对位置就固定下来了。线性表分为顺序表和链表。其中链式存储允许存储空间不连续,但顺序表不行。

2.1 跳表

上面的对比中可以看出,链表虽然通过增加指针域提升了自由度,但是却导致数据的查询效率恶化。特别是当链表长度很长的时候,对数据的查询还得从头依次查询,这样的效率会更低。跳表的产生就是为了解决链表过长的问题,通过增加链表的多级索引来加快原始链表的查询效率。这样的方式可以让查询的时间复杂度从O(n)提升至O(logn)。
在这里插入图片描述
1)
2)
3)

3. 栈

3.1 栈

遵守LIFO原则(后进先出)

3.2 队列

遵守FIFO原则(先进先出)

4. 树

4.1 二叉树(Binary Tree)

  1. 特点:除了最后一层外,其他层节点必须完全填满(每层从左到右没有空缺),最后一层的节点必须连续集中在左侧(允许右侧有空缺但左侧不能有)
    在这里插入图片描述
  2. 二叉树代码
    在这里插入图片描述
    此处是链式存储
    typedef struct BiNode {char data;struct BiTNode *lchild, *rchild; // 左右孩子指针
    } BiTNode, *BiTree;
    BiTree root = NULL; // 根节点
    root = (BiTree)malloc(sizeof(BiTNode));
    root -> data = 'A';
    root -> lchild = NULL;
    root -> rchild = NULL;
    // 插入结点B
    BiTNode *BNode = NULL;
    BNode = (BiTNode*)malloc(sizeof(BiTNode));
    BNode->data = 'B';
    BNode->lchild = NULL;
    BNode->rchild = NULL;
    root->lchild = BNode; // 定义了B之后才将A对应的root的左子树连接到B中
    // 插入结点C
    BiTNode *CNode = NULL;
    CNode = (BiTNode*)malloc(sizeof(BiTNode));
    CNode -> data = 'C';
    CNode -> lchild = NULL;
    CNode -> rchild = NULL;
    root -> rchild = CNode;  
    
  3. 二叉树

4.2 B+树

MySQL InnoDB索引(B+树)作为主要的索引结构,用于主键索引(聚簇索引)和辅助索引(二级索引)。B+树相比于AVL树、红黑树等数据结构,更适合数据库的大规模数据存储和磁盘存取优化。

  1. B+:平衡树(非二叉树),具有以下特点
    1)每个B+树的结点中含有n个关键字,而B+树每个节点中关键字个数n的取值范围是⌈m/2⌉≤n≤m⌈m/2⌉≤n≤mm/2nm
    2)所有的叶子节点包含了关键字的信息,及指向关键字记录的指针,且叶子节点本身依关键字的大小自小而大顺序链接。
    3)所有非终端节点(非叶子)是索引,结点中仅含有其子树(根节点)中最大/小的关键字

  2. 1

  3. 1

4.3 AVL树

4.4

5. 图

5.1 图的

6. 哈希表

  1. 概念:哈希表指通过哈希函数将键值映射到值的数据结构
  2. 哈希冲突:通过哈希查找发现该位置上已有对应的关键码值,发生冲突
  3. 解决冲突的方法:
    1)开发地址法:寻找另一个空闲地址,包括线性探测法和平方探测法
    2)链地址法:将所有哈希地址相同的记录链接到同一链表中,适用于频繁插入删除
    3)再哈希法:使用其他哈希函数计算新的地址
  4. 相关的代码
// 两数之和:给定一个整数数组nums和整数目标值target,请在该数组中找出和为目标值target的两个整数,并返回数组下标
class Solution {
public: vector<int> twoSum(vector<int>& nums, int target) {vector<int> ret;}
}

6.1

7. 堆

用于动态内存管理

7.1

8. 动态规划

将会定义两个关键:一是动态规划,二是状态转移。
其中状态定义是把求解过程中所有状态(子问题)表示出来是动态规划的难点

8.1 区间dp和树形dp

8.2

8.3 常见问题

  1. 朴素区间dp:在区间上进行dp,主要思路是通过合并小区间得到大区间的最优解

大区间是cost[i][j][k],其中包含dp[i][j]和dp[j][k],将其合并为区间dp[i][k] = dp[i][j] + dp[j][k] + cost[i][j][k]
动态规划将会定义两个关键,一是状态定义二是状态装

  1. 破坏成链
  2. 经典树形dp
  3. 树形背包
  4. 树形背包优化

9. 排序

9.1 快速排序(三路版)

#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
// 三路快速排序(递归版本)
void quickSort3Way(vector<int>& nums, int left, int right) {if (left>=right) return; // 递归终止条件// 选择基准值(选择中间元素)int pivot = nums[left+(right-left)/2];// 初始化三个指针}

10. 并查集

  1. 基础概念:并查集是一种树型数据结构用于处理不相交集合(disjoint sets)的合并及查询问题,常在使用中部用森林表示。
    A−BA-BAB
  2. 合并方式:
  3. 在这里插入图片描述

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

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

相关文章

Ubuntu22.04提示找不到python命令的解决方案

Ubuntu22.04提示找不到python命令的解决方案 问题背景 在Ubuntu22.04中按照获取Openharmony源码中的如下命令&#xff1a; // 方式一&#xff08;推荐&#xff09;&#xff1a;通过repo ssh下载&#xff08;需注册公钥&#xff0c;请参考码云帮助中心&#xff09;。repo in…

RabbitMQ面试精讲 Day 6:消息确认与事务机制

【RabbitMQ面试精讲 Day 6】消息确认与事务机制 开篇 欢迎来到"RabbitMQ面试精讲"系列的第6天&#xff01;今天我们将深入探讨RabbitMQ中确保消息可靠性的两大核心机制&#xff1a;消息确认与事务机制。这两个特性是面试中高频出现的热点问题&#xff0c;也是生产环…

被困扰的elementplus样式修改问题:select选择器修改和el-input修改

一、Select选择器的原生样式的本来面貌这是原生的没有经过任何加工的面貌&#xff1a;这是没有经过任何加工的选中时出现下拉框的面貌&#xff1a;这是没有经过加工的悬浮下拉菜单的面貌&#xff1a;这是没有经过加工的选中时的面貌&#xff1a;二、如何修改Select选择器&#…

GO 从入门到精通2

Go语言的反射&#xff08;Reflection&#xff09;机制通过 reflect 包实现&#xff0c;允许程序在运行时动态检查、修改和操作变量的类型信息和值。以下是反射的核心概念、用法及注意事项的详细解析&#xff1a;一、反射的基本概念reflect.Type 表示变量的类型信息&#xff0c;…

常用设计模式系列(十二)—享元模式

常用设计模式系列&#xff08;十二&#xff09;—享元模式 第一节 前言 昏昏沉沉的两天过去了&#xff0c;也不知道为什么&#xff0c;突然总觉得很困&#xff0c;可能之前熬夜熬的多了&#xff0c;所以现在可能年纪大了&#xff0c;需要蹦一蹦才能把自己从颓废的边缘拉扯回来&…

基于spring boot的医院挂号就诊系统(源码+论文)

一、开发环境 技术/工具描述MYSQL数据库1. 体积小&#xff0c;安装便捷&#xff1a;MySQL数据库体积小&#xff0c;占用内存小&#xff0c;不影响电脑上其他软件的运行&#xff0c;并且不需要因为安装维护MySQL数据库而重装系统。2. 适合老旧电脑&#xff1a;作为学习开发的电…

spring-security

<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId> </dependency>spring: security: user: name: root password: 123456 这个配置在访问接口时候根据您提供的Spring Secur…

搭建一个自定义的 React 图标库

搭建一个自定义的 React 图标库可以让你在多个项目中复用统一的图标资源&#xff0c;同时支持按需加载、主题化和灵活的配置。以下是详细的步骤指南&#xff1a; 1. 设计图标库结构 首先规划图标库的目录结构和功能&#xff1a; my-react-icons/ ├── src/ │ ├── ico…

宝塔面板如何升级OpenSSL

宝塔面板如何升级OpenSSL&#xff08;亲测可用&#xff09;目前一些服务器的OpenSSL还是1.0.1e版本&#xff0c;今天进行服务器漏洞检测出现OpenSSL存在漏洞&#xff0c;那只能升级OpenSSL了。1、登录SSH&#xff0c;查看OpenSSL版本openssl version2、下载源代码wget https://…

深入理解 C++ 红黑树:从理论到实践

引言 在计算机科学领域&#xff0c;数据结构是构建高效算法的基石。而在众多的数据结构中&#xff0c;平衡二叉搜索树因其优秀的查找、插入和删除性能而备受关注。红黑树&#xff08;Red-Black Tree&#xff09;作为一种自平衡的二叉搜索树&#xff0c;更是在 C 标准库&#x…

外星人笔记本装win11哪个版本好_外星人笔记本装win11专业版教程

外星人笔记本安装win11哪个版本好&#xff1f;答&#xff1a;外星人笔记本还是建议安装win11专业版。Win分为多个版本&#xff0c;其中家庭版&#xff08;Home&#xff09;和专业版&#xff08;Pro&#xff09;是用户选择最多的两个版本。win11专业版在功能以及安全性方面有着明…

自学嵌入式 day37 HTML

HTML:超文本标记语言HyperText Markup Language一种用于创建网页的标准标记语言HTML 运行在浏览器上&#xff0c;由浏览器来解析。https://www.runoob.com/html/html-tutorial.html1.格式 <!DOCTYPE html> <html><head><meta charset"utf-8"&g…

【车联网kafka】Kafka核心架构与实战经验(第一篇)

目录 一、我与kafka的缘分-初识Kafka 二、Kafka深入探讨-了解kafka ​编辑2.1 kafka 生产者框架 2.1.1 生产者在生活中的实例 2.1.2 kafka生产者流程及框架 1. 主线程处理阶段 2. Sender线程处理阶段 设计优势总结 2.2 kafka 生产者框架中的一些关键参数 2.3 kafka 生…

Go 语言变量作用域

Go 语言变量作用域 引言 在编程语言中&#xff0c;变量作用域是定义变量可以使用和不可使用的区域。在Go语言中&#xff0c;理解变量的作用域对于编写高效且易于维护的代码至关重要。本文将详细介绍Go语言中的变量作用域&#xff0c;包括其规则、类型以及实际应用。 一、变量作…

单卡10分钟部署MiniCPM4-0.5B:轻量级大模型本地运行指南

一、介绍 MiniCPM 4 是一个极其高效的边缘侧大型模型&#xff0c;经过了模型架构、学习算法、训练数据和推理系统四个维度的高效优化&#xff0c;实现了极致的效率提升。 &#x1f3d7;️ 高效的模型架构&#xff1a; InfLLM v2 – 可训练的稀疏注意力机制&#xff1a;采用可…

CSS变量与Houdini自定义属性:解锁样式编程新维度

在前端开发中&#xff0c;CSS变量和Houdini自定义属性正在彻底改变我们编写和管理样式的方式。这些技术不仅提高了样式代码的可维护性&#xff0c;更为CSS带来了编程语言的强大能力。一、CSS变量&#xff1a;原生样式的革命 CSS变量&#xff08;CSS Custom Properties&#xff…

Android中PID与UID的区别和联系(2)

一、核心概念对比特性PID (Process ID)UID (User ID)本质进程唯一标识符应用身份标识符分配时机进程启动时动态分配应用安装时静态分配生命周期进程结束时回收应用卸载时才回收变化性每次启动都可能不同长期保持不变作用范围单进程内唯一全设备范围唯一核心作用系统资源管理&am…

TCPDump实战手册:协议/端口/IP过滤与组合分析指南

目录 一、基础过滤速查表 1. 协议过滤&#xff08;单协议&#xff09; 2. 端口过滤 3. IP地址过滤 二、组合过滤实战示例 1. 协议端口组合 2. IP端口组合 3. 复杂逻辑组合 三、高级协议分析示例 1. HTTP请求分析 2. DNS问题排查 3. TCP连接问题分析 四、组合过滤场…

【智能协同云图库】智能协同云图库第八弹:基于阿里云百炼大模型—实现 AI 扩图功能

AI 扩图功能 需求分析 随着 AI 的高速发展&#xff0c;AI 几乎可以应用到任何传统业务中&#xff0c;增强应用的功能&#xff0c;带给用户更好的体验。 对于图库网站来说&#xff0c;AI 也有非常多的应用空间&#xff0c;比如可以利用 AI 绘图大模型来编辑图片&#xff0c;实现…

2025年Solar应急响应公益月赛-7月笔记ing

应急响应身为颜狗的我是真心觉得lovelymem的ui写得~~~~【任务1】应急大师题目描述&#xff1a;请提交隐藏用户的名称&#xff1f;print打印注册表&#xff0c;或者开启环境是就有【任务4】应急大师题目描述&#xff1a;请提交黑客创建隐藏用户的TargetSid&#xff08;目标账户安…