数据结构-基础

news2025/4/16 7:55:49

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):每个数组元素不仅存储一个值,而是存储一个链表

                或其他数据结构的引用。在发生冲突时,将相同索引的键值对存放到链表中。

                优点:处理冲突时非常灵活,不会浪费空间。
                缺点:如果哈希表的负载因子过大(链表过长),查找性能会下降。

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

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

相关文章

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…

财务主题数据分析-企业盈利能力分析

企业盈利能力数据主要体现在财务三张表中的利润表里面&#xff0c;盈利能力需要重点需要关注的指标有&#xff1a;毛利率、净利率、净利润增长率、营业成本增长率等&#xff1b; 接下来我们分析一下某上市公司披露的财务数据&#xff0c;看看该企业盈利能力如何&#xff1a; …

你需要了解的远程登录协议——Telnet

你需要了解的远程登录协议——Telnet 一. 什么是Telnet&#xff1f;二. Telnet的优缺点三. Telnet vs SSH&#xff1a;哪一个更适合&#xff1f;四. Telnet的应用场景 前言 点个免费的赞和关注&#xff0c;有错误的地方请指出&#xff0c;看个人主页有惊喜。 作者&#xff1a;神…

web逆向企鹅音乐,下载歌手歌单音乐

声明&#xff1a; 该文章为学习使用&#xff0c;严禁用于商业用途和非法用途&#xff0c;违者后果自负&#xff0c;由此产生的一切后果均与作者无关 下载资源链接&#xff1a;https://download.csdn.net/download/randy521520/90374039 一、找出需要加密的参数 1.js运行 atob…

stm32 lwip tcp服务端频繁接收连接失效问题解决(tcp_recved)

一、问题描述 最近用stmf429单片机作为TCP服务端遇到一个问题&#xff0c;就是客户端特别频繁的发送消息&#xff0c;过一段时间以后&#xff0c;客户端的请求不再被客户端接收到&#xff0c;而且服务器端监控的掉线回调函数也不会被调用&#xff0c;好像这个连接就凭空的消失…

Python Pandas(7):Pandas 数据清洗

数据清洗是对一些没有用的数据进行处理的过程。很多数据集存在数据缺失、数据格式错误、错误数据或重复数据的情况&#xff0c;如果要使数据分析更加准确&#xff0c;就需要对这些没有用的数据进行处理。数据清洗与预处理的常见步骤&#xff1a; 缺失值处理&#xff1a;识别并…

【重构谷粒商城】06:Maven快速入门教程

重构谷粒商城06——Maven快速入门教程 前言&#xff1a;这个系列将使用最前沿的cursor作为辅助编程工具&#xff0c;来快速开发一些基础的编程项目。目的是为了在真实项目中&#xff0c;帮助初级程序员快速进阶&#xff0c;以最快的速度&#xff0c;效率&#xff0c;快速进阶到…

Elasticsearch:同义词在 RAG 中重要吗?

作者&#xff1a;来自 Elastic Jeffrey Rengifo 及 Toms Mura 探索 RAG 应用程序中 Elasticsearch 同义词的功能。 同义词允许我们使用具有相同含义的不同词语在文档中搜索&#xff0c;以确保用户无论使用什么确切的词语都能找到他们所寻找的内容。你可能会认为&#xff0c;由于…

React 低代码项目:组件设计

React 低代码项目&#xff1a;组件设计 Date: February 6, 2025 React表单组件 **目标&#xff1a;**使用 Ant Design 表单组件&#xff0c;开发登录、注册、搜索功能 内容&#xff1a; 使用 React 表单组件、受控组件使用 Ant Design 表单组件使用 表单组件的校验和错误提…

从0到1的回溯算法学习

回溯算法 前言这个算法能帮我们做啥算法模版力扣例题&#xff08; 以下所有题目代码都经过力扣认证 &#xff09;形式一 元素无重不可复选46.全排列思路详解代码 77.组合思路详解代码 78.子集思路详解代码 形式二 元素可重不可复选思考&#xff08;deepseek&#xff09;核心思想…

AVL树:高效平衡的二叉搜索树

&#x1f31f; 快来参与讨论&#x1f4ac;&#xff0c;点赞&#x1f44d;、收藏⭐、分享&#x1f4e4;&#xff0c;共创活力社区。&#x1f31f; 引言&#x1f914; 在数据结构的奇妙世界里&#xff0c;二叉搜索树&#xff08;BST&#xff09;原本是查找数据的好帮手。想象一下…

RHCA练习5:配置mysql8.0使用PXC实现高可用

准备4台CentOS7的虚拟机&#xff08;CentOS7-1、CentOS7-2、CentOS7-3、CentOS7-4&#xff09; 备份原yum源的配置&#xff1a; mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup 更换阿里云镜像YUM源&#xff1a; curl -o /etc/yum.repos.…

Java 大视界 -- 边缘计算与 Java 大数据协同发展的前景与挑战(85)

&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎来到 青云交的博客&#xff01;能与诸位在此相逢&#xff0c;我倍感荣幸。在这飞速更迭的时代&#xff0c;我们都渴望一方心灵净土&#xff0c;而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识&#xff0c;也…

机器学习 - 理论和定理

在机器学习中&#xff0c;有一些非常有名的理论或定理&#xff0c;对理解机器学习的内在特性非常有帮助。本文列出机器学习中常用的理论和定理&#xff0c;并举出对应的举例子加以深化理解&#xff0c;有些理论比较抽象&#xff0c;我们可以先记录下来&#xff0c;慢慢啃&#…

2025.2.11——一、[极客大挑战 2019]PHP wakeup绕过|备份文件|代码审计

题目来源&#xff1a;BUUCTF [极客大挑战 2019]PHP 目录 一、打开靶机&#xff0c;整理信息 二、解题思路 step 1&#xff1a;目录扫描、爆破 step 2&#xff1a;代码审计 1.index.php 2.class.php 3.flag.php step 3&#xff1a;绕过__wakeup重置 ​编辑 三、小结…