数据结构-基础
1、概念:
程序 == 数据结构 + 算法
2、程序的好坏
可读性,稳定性,扩展性,时间复杂度,空间复杂度。
3、数据结构
是指存储、组织数据的方式,以便高效地进行访问和修改。通过选择适当的数据结构,
能够优化计算机程序的时间和空间效率。
4、分类
逻辑结构
线性结构(表),非线性结构(树,图)
存储结构
顺序存储,链式存储,索引存储,散列存储
5、数据结构:
顺序表
链表
顺序栈
链式栈
队列
树
哈希表等
6、顺序表
1、定义类型

7、工程代码目录结构
1、main.c :主函数程序代码
2、fun.c :功能程序代码
3、fun.h : 工程程序代码头文件
8、gdb调试工具
l 查看代码
b 行号/函数名 设置断点
r 运行代码
n 单步执行
s 进入函数内部调试
p 变量名 查看变量内容
q 退出调试
9、链表
链表(Linked List)是一种常见的数据结构,用于存储一系列数据元素。与数组不同,链表
中的元素不是在连续的内存位置上存储,而是通过指针将每个元素链接到下一个元素
链表的基本结构
链表由一系列节点(Node)组成,每个节点包含两个部分:
数据部分:存储实际的数据。
指针部分:存储指向下一个节点的地址(在单链表中),或在双向链表中指向前一个
和下一个节点的地址。
单向链表(Singly Linked List):
每个节点只包含一个指向下一个节点的指针。只有一个方向可以遍历链表。
链表的优缺点
优点:
动态大小:链表的大小是动态的,不像数组需要预先确定大小。
高效插入和删除:在链表中插入或删除元素时,无需移动其他元素,尤其是当
在链表的头部或尾部插入时,操作非常高效(O(1)时间复杂度)。
缺点:
访问效率较低:访问链表中的某个元素需要从头节点开始逐一遍历,时间复
杂、 度为O(n),相比之下,数组的访问是O(1)。
额外的内存消耗:每个节点需要额外存储指针,相比数组,需要更多的内存。
10、栈和队列
1、栈与队列与表的区别
栈和队列是一种特殊的表状结构
栈和队列只允许在固定位置取出或者插入数据
栈:先进后出
队:先进先出

11、树
树是一种非线性的数据结构,由若干个节点组成,每个节点有一个父节点和若干个子
节点。树的特点是没有环,并且节点之间存在父子关系。树的最顶层节点叫做根节点,
而没有子节点的节点叫做叶子节点。
树的基本特性:
根节点:树的最顶层节点,没有父节点。
父子关系:每个节点可以有多个子节点,但只能有一个父节点。
层次结构:树的节点按层级排列,从根节点开始,根节点为第0层,它的子节点为
第1层,以此类推。
节点:树中的每个元素都称为节点。
边:连接父节点与子节点之间的线叫做边。
树的形式可以有很多种,例如:多叉树、二叉树、平衡树等。
12. 二叉树 (Binary Tree)
二叉树是树的一种特殊形式,在二叉树中,每个节点最多有两个子节点,分别称为
左子节点和右子节点。二叉树是一种非常重要的树形结构,广泛应用于搜索算法
(如二叉搜索树)、表达式树等。
二叉树的特点:
每个节点最多有两个子节点(左子节点和右子节点)。
具有递归的性质,左右子树也可以是二叉树。
二叉树的类:
满二叉树 (Full Binary Tree):
每个节点要么没有子节点,要么有两个子节点。
完全二叉树 (Complete Binary Tree):
除了最底层外,其他层的节点都填满,且最底层的节点从左到右填充。
平衡二叉树 (Balanced Binary Tree):
每个节点的左右子树高度差不超过1。
二叉搜索树 (Binary Search Tree, BST):
左子树的值都小于根节点,右子树的值都大于根节点。
二叉树的遍历方式:
前序遍历 (Pre-order Traversal):
根节点 -> 左子树 -> 右子树
访问顺序:根、左、右
中序遍历 (In-order Traversal):
左子树 -> 根节点 -> 右子树
访问顺序:左、根、右
后序遍历 (Post-order Traversal):
左子树 -> 右子树 -> 根节点
访问顺序:左、右、根
层次遍历 (Level-order Traversal):
按层次逐行访问,从根节点开始,逐层向下。
13、深度优先遍历 (DFS)
深度优先遍历(DFS)是沿着图或树的深度探索每一条路径,直到走到最深处为止,
然后回溯到上一层,继续探索其他路径。DFS 可以通过递归或使用栈来实现。
DFS 思想:
从起始节点开始,沿着一条路径一直深入,直到无法继续为止。
一旦遇到无法继续的节点(叶节点或已访问的节点),就回溯到上一个节点,继续
探索未被访问的邻接节点。
在树结构中,DFS 是沿着树的深度逐层展开的。
DFS 实现:
选择一个节点作为起始节点。
访问当前节点并标记为已访问。
遍历当前节点的所有邻接节点,如果邻接节点未被访问,则递归调用 DFS 进行深度
遍历。
如果当前节点的所有邻接节点都已访问过,回溯到上一个节点。
14、广度优先遍历 (BFS)
广度优先遍历(BFS)是按层次逐层遍历图或树,从起始节点开始,首先访问所有邻接
的节点,然后再访问邻接节点的邻接节点,直到遍历完整个图或树。
BFS 思想:
BFS 按层次进行遍历,先访问当前节点的所有邻接节点,再逐层访问。
BFS 使用队列来实现,先进先出(FIFO)的特性保证了按层次遍历。
BFS 实现:
选择一个节点作为起始节点。
将起始节点加入队列,并标记为已访问。
从队列中取出一个节点,访问它并将其所有未访问的邻接节点加入队列。
重复步骤 3,直到队列为空。
15、哈希曼表
哈希曼表(Hash Map)是一种基于哈希(散列)技术的数据结构,用于实现高效的元
素查找、插入和删除操作。它通过将键(key)映射到值(value)来存储数据,通常具
有非常高的查找效率,平均时间复杂度为 O(1),因此在许多应用中被广泛使用。
哈希表的基本原理:
哈希表通过 哈希函数 将键(key)映射到一个数组的位置(即索引)。该位置存储
与该键相关的值(value)。哈希函数的目的是尽量将不同的键映射到数组中不同
的位置,减少冲突的发生。
哈希表的结构:
数组:哈希表通常由一个数组构成,数组的每个元素用于存储一对键值对
(key-value)。
哈希函数:通过哈希函数将键(key)映射到数组的索引位置。
冲突解决:由于不同的键可能会被映射到相同的索引(即哈希冲突),因此需要一
种方法来解决冲突。
哈希表的常见操作:
插入 (Insert):将一个键值对插入哈希表中。使用哈希函数计算键的索引,并将值
存储在该索引位置。
查找 (Search):根据给定的键,使用哈希函数计算索引,查找对应的值。
删除 (Delete):删除给定键的键值对,移除该位置的元素。
哈希冲突的解决方法:
链地址法(Separate Chaining):每个数组元素不仅存储一个值,而是存储一个链表
或其他数据结构的引用。在发生冲突时,将相同索引的键值对存放到链表中。
优点:处理冲突时非常灵活,不会浪费空间。
缺点:如果哈希表的负载因子过大(链表过长),查找性能会下降。
相关文章:
数据结构-基础
1、概念: 程序 数据结构 算法 2、程序的好坏 可读性,稳定性,扩展性,时间复杂度,空间复杂度。 3、数据结构 是指存储、组织数据的方式,以便高效地进行访问和修改。通过选择适当的数据结构, 能…...
2024年博客之星年度评选—主题文章创作评审文章得分公布
博客之星活动地址:https://www.csdn.net/blogstar2024 创作影响力评审入围名单:https://blogdev.blog.csdn.net/article/details/145189549 目录 主题文章创作评审得分排名 主题文章创作说明 主题文章评选说明 创作影响力评审主题文章创作评审目前排名 博…...
【科技时讯】2025年2月13日科技新闻速递
文章目录 2025年2月13日科技新闻速递1. OpenAI宣布GPT系列重大升级计划2. 华为云推出DeepSeek V3/R1满血版模型3. 全球科技行业动态4. 国内科技企业动态5. 数字经济与统计制度革新6. 资本市场与科技股表现7. 科技新闻逻辑关系图 2025年2月13日科技新闻速递 1. OpenAI宣布GPT系…...
AGI的基石:什么是机器学习
什么是机器学习:机器学习是人工智能的子集,深度学习是其重要的组成部分,包括不限于:deep neural networks 、deep belief networks和recurrent neural networks。在深度学习中,有三种基本的神经网络架构:FF…...
SQL布尔盲注+时间盲注
1.布尔盲注 双重for循环 import requestsurl http://127.0.0.1/sqli-labs-master/Less-8/index.phpdef database_name():datebasename for i in range(1, 9): # 假设数据库名称最多8个字符for j in range(32, 128): # ascii 可见字符范围从32到127payload f"?id1 A…...
2024-2025年主流的开源向量数据库推荐
以下是2024-2025年主流的开源向量数据库推荐,涵盖其核心功能和应用场景: 1. Milvus 特点:专为大规模向量搜索设计,支持万亿级向量数据集的毫秒级搜索,适用于图像搜索、聊天机器人、化学结构搜索等场景。采用无状态架…...
Mysql中使用sql语句生成雪花算法Id
🍓 简介:java系列技术分享(👉持续更新中…🔥) 🍓 初衷:一起学习、一起进步、坚持不懈 🍓 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正🙏 🍓 希望这篇文章对你有所帮助,欢…...
MySQL - 索引 - 介绍
索引(Index)是帮助数据库高效获取数据的数据结构. 结构 语法 创建索引 creat [unique] index 索引名 on 表名 (字段名, ...); //创建唯一索引时加上unique, 多个字段用逗号隔开 查看索引 show index from 表名; 删除索引 drop index 索引名 on 表名;...
XSS 常用标签及绕过姿势总结
XSS 常用标签及绕过姿势总结 一、xss 常见标签语句 0x01. 标签 <a href"javascript:alert(1)">test</a> <a href"x" onfocus"alert(xss);" autofocus"">xss</a> <a href"x" onclickeval(&quo…...
Springboot中添加原生websocket支持
1、添加配置 Configuration EnableWebSocket public class WebSocketConfig implements WebSocketConfigurer {Overridepublic void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {// 注册WebSocket处理器,并允许所有来源的连接(在生…...
财务主题数据分析-企业盈利能力分析
企业盈利能力数据主要体现在财务三张表中的利润表里面,盈利能力需要重点需要关注的指标有:毛利率、净利率、净利润增长率、营业成本增长率等; 接下来我们分析一下某上市公司披露的财务数据,看看该企业盈利能力如何: …...
你需要了解的远程登录协议——Telnet
你需要了解的远程登录协议——Telnet 一. 什么是Telnet?二. Telnet的优缺点三. Telnet vs SSH:哪一个更适合?四. Telnet的应用场景 前言 点个免费的赞和关注,有错误的地方请指出,看个人主页有惊喜。 作者:神…...
Git -> Git配置密钥对,并查看公钥
Git密钥对的核心作用 私钥 (id_rsa) 你的数字身份证:存放在本机 ~/.ssh 目录下必须严格保密(类似银行卡密码),不可泄露或共享用于 解密 来自服务器的加密信息 公钥 (id_rsa.pub) 可公开的验证锁:需要上传到 Git 服…...
web逆向企鹅音乐,下载歌手歌单音乐
声明: 该文章为学习使用,严禁用于商业用途和非法用途,违者后果自负,由此产生的一切后果均与作者无关 下载资源链接:https://download.csdn.net/download/randy521520/90374039 一、找出需要加密的参数 1.js运行 atob…...
stm32 lwip tcp服务端频繁接收连接失效问题解决(tcp_recved)
一、问题描述 最近用stmf429单片机作为TCP服务端遇到一个问题,就是客户端特别频繁的发送消息,过一段时间以后,客户端的请求不再被客户端接收到,而且服务器端监控的掉线回调函数也不会被调用,好像这个连接就凭空的消失…...
Python Pandas(7):Pandas 数据清洗
数据清洗是对一些没有用的数据进行处理的过程。很多数据集存在数据缺失、数据格式错误、错误数据或重复数据的情况,如果要使数据分析更加准确,就需要对这些没有用的数据进行处理。数据清洗与预处理的常见步骤: 缺失值处理:识别并…...
【重构谷粒商城】06:Maven快速入门教程
重构谷粒商城06——Maven快速入门教程 前言:这个系列将使用最前沿的cursor作为辅助编程工具,来快速开发一些基础的编程项目。目的是为了在真实项目中,帮助初级程序员快速进阶,以最快的速度,效率,快速进阶到…...
Elasticsearch:同义词在 RAG 中重要吗?
作者:来自 Elastic Jeffrey Rengifo 及 Toms Mura 探索 RAG 应用程序中 Elasticsearch 同义词的功能。 同义词允许我们使用具有相同含义的不同词语在文档中搜索,以确保用户无论使用什么确切的词语都能找到他们所寻找的内容。你可能会认为,由于…...
React 低代码项目:组件设计
React 低代码项目:组件设计 Date: February 6, 2025 React表单组件 **目标:**使用 Ant Design 表单组件,开发登录、注册、搜索功能 内容: 使用 React 表单组件、受控组件使用 Ant Design 表单组件使用 表单组件的校验和错误提…...
从0到1的回溯算法学习
回溯算法 前言这个算法能帮我们做啥算法模版力扣例题( 以下所有题目代码都经过力扣认证 )形式一 元素无重不可复选46.全排列思路详解代码 77.组合思路详解代码 78.子集思路详解代码 形式二 元素可重不可复选思考(deepseek)核心思想…...
24、深度学习-自学之路-卷积神经网络
一、你怎么理解卷积神经网络呢,我的理解是当你看一个东西的时候,你的眼睛距离图片越近,你看到的东西就越清晰,但是如果你看到的图片只是整个物体的一小部分,那么你将不知道你看到的物品是什么,因为关注整体…...
AVL树:高效平衡的二叉搜索树
🌟 快来参与讨论💬,点赞👍、收藏⭐、分享📤,共创活力社区。🌟 引言🤔 在数据结构的奇妙世界里,二叉搜索树(BST)原本是查找数据的好帮手。想象一下…...
RHCA练习5:配置mysql8.0使用PXC实现高可用
准备4台CentOS7的虚拟机(CentOS7-1、CentOS7-2、CentOS7-3、CentOS7-4) 备份原yum源的配置: mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 更换阿里云镜像YUM源: curl -o /etc/yum.repos.…...
若输入超过 5 位数个时,推荐使用 scanf 输入数据。
【知识点】 在 C 中,当需要处理超过 5 位数个输入时,推荐使用 scanf 而不是 cin 输入数据。 这是因为 scanf 通常比 cin 更快。 另外,若整数超过 10 位,选择用 long long 型,而不是 int 型。 【参考文献】 https://b…...
Java 大视界 -- 边缘计算与 Java 大数据协同发展的前景与挑战(85)
💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…...
Android 原生层SurfaceView截屏
背景:flutter嵌入原生view时,原生view使用的surfaveview,导致下面两种方法无法正常使用。 导致flutter无法通过id找到RenderRepaintBoundary的toImage来抓取widget,原生层无法通过view去获取Bitmap 方案:使用PixelCopy…...
机器学习 - 理论和定理
在机器学习中,有一些非常有名的理论或定理,对理解机器学习的内在特性非常有帮助。本文列出机器学习中常用的理论和定理,并举出对应的举例子加以深化理解,有些理论比较抽象,我们可以先记录下来,慢慢啃&#…...
2025.2.11——一、[极客大挑战 2019]PHP wakeup绕过|备份文件|代码审计
题目来源:BUUCTF [极客大挑战 2019]PHP 目录 一、打开靶机,整理信息 二、解题思路 step 1:目录扫描、爆破 step 2:代码审计 1.index.php 2.class.php 3.flag.php step 3:绕过__wakeup重置 编辑 三、小结…...
读取本地excel删除第一行,并生成List数组
在 pom.xml 里添加如下依赖: <dependencies><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>5.2.3</version></dependency><dependency><groupId>org.ap…...
Vivado生成edif网表及其使用
介绍如何在Vivado中将模块设为顶层,并生成相应的网表文件(Verilog文件和edif文件),该过程适用于需要将一个模块作为顶层设计进行综合,并生成用于其他工程中的网表文件的情况。 例如要将fpga_top模块制作成网表给其它工…...
