常用的数据结构及算法

news2024/11/27 10:30:38

一、数据结构

(一)线性结构:一对一。

1.可以使用数组、链表来表示。数组又分为静态数组和动态数组两种。链表常用的是单链表。

2.两种特殊的线性结构:队列和栈。其中队列是先进先出(排队),栈是后进先出(类似弹夹)

(二)树形结构:一对多。

拓扑结构上是一对多的情况,逻辑存储上还是通过数组、链表(不是单链表了,因为不是一对一了)实现。

1.有双亲表示法、孩子表示法、孩子兄弟表示法。

1)双亲表示法:通过静态数组的方式,存储当前结点的数据、双亲的位置(根节点的双亲结点设置为-1)。该方法的优点是容易找到结点的双亲结点,但是找结点的孩子结点就需要遍历。

优化方式:除双亲的位置外,再增加一个长子域(最左孩子的位置),如结点无孩子结点,长子域设置为-1。

2)孩子表示法:链表形式,通过指针域指向各个孩子结点(一般的树,设置的指针域的个数为树的度;二叉树,就是两个指向孩子结点的指针域)。

优化方式一:因为每个结点的度不同,按树的度来设置指针域的话,容易造成资源浪费。

所以,可以增加当前结点的度,然后根据每个结点的度来设置指针域的个数。但该方法不同的结点度不同,而且还要维护度数据,维护复杂。

优化方式二:将每个结点的孩子结点排列起来,以单链表作存储结构,则n个结点有n个孩子链表,如果是叶子结点则此单链表为,空。然后n个头指针又组成一个线性表,采用顺序存储结构,存在一维数组中。

图中,child中的数据域,是表头中该元素的下标值。 

firstchild是指向子节点的头指针。

但该方法,寻找双亲结点又需要遍历,下图就是将双亲表示法和孩子表示法结合。

3)孩子兄弟表示法:任意一棵树,它的结点的第一个孩子如果存在就是唯一的,它的右兄弟如果存在也是唯一的。因此,可以设置两个指针,分别指向该结点的第一个孩子和此结点的右兄弟。

上图调整了下形状,就是二叉树

2.常用的是二叉树。

每个阶段都是两种结果,比如开和关、0和1、真和假、上和下等等,都适合用二叉树结构来建模。

树2是左斜树,树5是右斜树,是线性结构,所以说线性结构是一种特殊的树形结构。 

满二叉树

完全二叉树 

3.二叉树的性质

1) 在二叉树的第i层上至多有个结点(i>=1)

2)深度为k的二叉树至多有个结点(k>=1)

3)对任何一棵二叉树T,如果其终端结点数为n0,度为2的结点数为n2,则n0=n2+1(青出于蓝而胜于蓝)

4)具有n个结点的完全二叉树的深度为表示不大于x的最大整数

5)如果对一棵有n个结点的完全二叉树的结点按层序编号(从第1层到第)对任意结点i有:

4.二叉树的存储结构

1)顺序存储:一般只用于完全二叉树,否则会浪费存储空间(如下图所示,会造成空间的浪费)

2)二叉链表(一般用这种形式)

当前结点数据及左右孩子指针

线索二叉树:指向前驱和后继(前驱和后继是按照遍历的方式的定的,不是根据双亲和子结点)的指针称为线索,加上线索的二叉链表称为线索链表,相应的二叉树 称为线索二叉树。

 

3.二叉树三种遍历方式:前序、中序、后序

(三)图结构:多对多。

二、算法

(一)查找

1.顺序查找:

优化方式:设置哨兵位置。

2.插值查找

3.

4.

5.

6.

7.哈希查找:上述的查找方式是通过将要查找的关键字与记录中的中关键字进行比较;

哈希查找则是通过构建哈希函数,将查找记录的关键词与存储的位置绑定,

(二)排序

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

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

相关文章

OCR识别图片的字体与正常的字不同怎么调回来呢?

一般来说,OCR的任务是将图片文字转化成计算机可编辑的文字,一般不识别字体,当然,也不排除某些OCR软件可以识别字体的,具体来说,造成这种现象的可能原因如下: 1. **字体匹配问题**:OC…

IPFS分布式存储系统

一、 引言 IPFS是InterPlanetary File System的缩写。它是一个分布式的网络传输协议,它可以把文件分成很多小块放到服务器的不同地方,然后用一种特别的方式来寻找和传输这些小块。这样,我们就可以更快、更安全、更抗容错了的存储文件了。 可能…

FinalShell 远程连接 Linux(Ubuntu)系统

Linux 系列教程: VMware 安装配置 Ubuntu(最新版、超详细)FinalShell 远程连接 Linux(Ubuntu)系统Ubuntu 系统安装 VS Code 并配置 C 环境 ➡️➡️➡️提出一个问题:为什么使用 FinalShell 连接&#xff0…

文件msvcr120.dll丢失怎样修复?这三种方法能准确修复msvcr120.dll

小编为大家总结了解决msvcr120.dll文件缺失问题的三种方法,以帮助你快速解决这一难题。首先,我们来看看msvcr120.dll文件为何会出现丢失的情形。 一.msvcr120.dll丢失问题的常见原因包括 病毒感染:病毒或恶意软件侵入电脑有可能会损毁或删除…

NPL预训练模型-GPT-3

简介及特点 GPT-3是一个由OpenAI开发的自然语言处理(NLP)预训练模型,它是生成式预训练变换器(Generative Pretrained Transformer)系列的第三代模型。GPT-3以其巨大的规模和强大的语言处理能力而闻名,具有…

LLM学习笔记-1

过往历史 ​​ 大体框架 手戳GPT2-small 一些概念 pytorch注意力机制(Transformer)LLM 过程 模型参数 GPT_CONFIG_124M {"vocab_size": 50257, # 词表大小"ctx_len": 1024, # 上下文长度"emb_dim": 768, # 嵌入维度"n…

python笔记 | 哥德巴赫猜想

哥德巴赫猜想:每个不小于6的偶数都可以表示成两个素数之和。 素数:只能被1和自身整除的正整数。就是大于1且除了1和它本身之外没有其他因数的数。例如,2、3、5、7、11等都是素数,而4、6、8、9等则不是素数。 下面这段Python代码…

vue实现文字转语音的组件,class类封装,实现项目介绍文字播放,不需安装任何包和插件(2024-04-17)

1、项目界面截图 2、封装class类方法(实例化调用) // 语音播报的函数 export default class SpeakVoice {constructor(vm, config) {let that thisthat._vm vmthat.config {text: 春江潮水连海平,海上明月共潮生。滟滟随波千万里&#xf…

力扣哈哈哈哈

public class MyStack {int top;Queue<Integer> q1;Queue<Integer> q2;public MyStack() {q1new LinkedList<Integer>();q2new LinkedList<Integer>();}public void push(int x) {q2.offer(x);//offer是入队方法while (!q1.isEmpty()){q2.offer(q1.pol…

内网代理技术总结

代理技术就是解决外网和内网的通信问题&#xff0c;例如&#xff0c;我的一个外网主机想要找到另外一个网段下的一个内网主机&#xff0c;理论上是无法找到的。如果我们想要进行通信的话就要使用代理技术。我们可以找到一个与目标内网主机在容易网段下可以通信的外网主机&#…

华为OD机试 - 分披萨 - 动态规划(Java 2024 C卷 200分)

华为OD机试 2024C卷题库疯狂收录中&#xff0c;刷题点这里 专栏导读 本专栏收录于《华为OD机试&#xff08;JAVA&#xff09;真题&#xff08;A卷B卷C卷&#xff09;》。 刷的越多&#xff0c;抽中的概率越大&#xff0c;每一题都有详细的答题思路、详细的代码注释、样例测试…

golang map总结

目录 概述 一、哈希表原理 哈希函数 哈希表和哈希函数的关系 哈希表的优势 哈希冲突 什么是哈希冲突 如何处理哈希冲突 链表法 开放寻址法 哈希表常见操作过程 存储数据 检索数据 删除数据 常用的哈希算法 哈希表的应用场景 二、golang map map的内部结构 h…

学习笔记------时序约束之时钟周期约束

本文摘自《VIVADO从此开始》高亚军 主时钟周期约束 主时钟&#xff0c;即从FPGA的全局时钟引脚进入的时钟或者由高速收发器输出的时钟。 对于时钟约束&#xff0c;有三个要素描述&#xff1a;时钟源&#xff0c;占空比和时钟周期。 单端时钟输入 这里我们新建一个工程&#x…

爬楼梯(c)

文章目录 描述分析思路关键代码运行结果 描述 给定一个整数数组 cost &#xff0c;其中 cost[i]是从楼梯第i 个台阶向上爬需要支付的费用&#xff0c;下标从0开始。-旦你支付此费用&#xff0c;即可选择向上爬一个或者两个台阶 要求&#xff1a;请你计算并返回达到楼梯顶部的…

每天五分钟计算机视觉:基于卷积操作完成滑动窗口的图片分类?

本文重点 我们前面学习了使用不同大小的滑动窗口来滑动图片,然后切分成许多小的图片,然后依次应用到我们已经训练好的图像分类模型中,但是这种方式效率太低了,本节课程我们学习一种新的方式,来看一下如何并行识别这些剪切的图片。 原始结构 首先我们先来看一下,如何把…

【题目】【信息安全管理与评估】2022年国赛高职组“信息安全管理与评估”赛项样题8

【题目】【信息安全管理与评估】2022年国赛高职组“信息安全管理与评估”赛项样题8 信息安全管理与评估 网络系统管理 网络搭建与应用 云计算 软件测试 移动应用开发 任务书&#xff0c;赛题&#xff0c;解析等资料&#xff0c;知识点培训服务 添加博主wx&#xff1a;liuliu548…

【C++】二维数组传参方式

最近刚开始刷剑指offer&#xff0c;刚做到第三题的时候&#xff0c;发现C二维数组的传参方式和C语言略有些不同&#xff0c;所以在这篇博客中&#xff0c;会列出C/C常见的二维数组传参方式。&#xff08;本方式和代码都是基于vs环境所编写&#xff09; 一.C语言二维数组传参方式…

[入门]测试层级-ApiHug准备-测试篇-005

&#x1f917; ApiHug {Postman|Swagger|Api...} 快↑ 准√ 省↓ GitHub - apihug/apihug.com: All abou the Apihug apihug.com: 有爱&#xff0c;有温度&#xff0c;有质量&#xff0c;有信任ApiHug - API design Copilot - IntelliJ IDEs Plugin | Marketplace 这里的测…

K8s的亲和、反亲和、污点、容忍

1 亲和与反亲和 亲和性的原理其实很简单&#xff0c;主要利用label标签结合nodeSelector选择器来实现 1.1 Pod和Node 从pod出发&#xff0c;可以分成亲和性和反亲和性&#xff0c;分别对应podAffinity和podAntiAffinity。从node出发&#xff0c;也可以分成亲和性和反亲和性&…