基本数据结构简记

news/2024/9/29 23:52:22/

简单记录一下常见的一些数据结构的概念,不包含树和图。

一、线性数据结构

1、主要成员(或形式)

栈,队列,双端队列,列表

2、特点

有两端

区分方式:元素添加与移除方式

二、栈

1、特点

添加与移除总发生在同一端

排序原则:后进先出(LIFO)

2、补充

栈不能用于查找

程序内存分区中的堆栈概念与算法中堆栈概念不同,算法中的堆式一种特殊的二叉树,具体概念不在此处记录

三、队列

1、特点

添加操作在尾部,移除操作在头部

排序原则:先进先出(FIFO)

2、双端队列

在哪一端添加或移除无限制

排序原则,无要求,取决于使用者

3、优先级队列

优先级队列从头部移除元素,不过元素的逻辑顺序是由优先级决定的。优先级最高的元素在最前,优先级最低的元素在最后。

四、列表(链表)

1、特点

每一个元素都有一个相对于其他元素的位置

数组的线性顺序是由数组下标决定的,链表的顺序是由各个对象里的位置指向决定的

链表可分:单链接双链接,已排序未排序,循环非循环

2、单链接与双链接

单链接链表只有后向链接,双链接链表有前向与后向两个链接

3、已排序未排序

已排序链表, 链表的线性顺序与链表元素中关键字的线性顺序一致,未排序链表, 元素可以以任何顺序出现

4、循环非循环


循环链表,表头元素的 prev 指针指向表尾元素,而表尾元素的 next 指针则指向表头元素,形成一个圆环

五、数组与集合

1、数组

数组是计算机科学中最基本的数据结构之一。如果你用过数组,那么应该知道它就是一个含有数据的列表。 此外,我们会用一些名为索引的数字来标识每项数据在数组中的位置

2、集合


集合。它是一种不允许元素重复的数据结构 其实集合是有不同形式的,但现在我们只讨论基于数组的那种。这种集合跟数组差不多,都是一个普通的元素列表,唯一的区别在于,集合不允许插入重复的值。

六、散列表(hashtable 哈希表)

1、概念

普通数组概念的推广, 是实现字典操作的一种有效数据结构, 也被称为散列映射、映射、字典和关联数组

一种包含额外逻辑的数据结构

数组和链表都被直接映射到内存,但散列表更复杂,它使用散列函数来确定元素的存储位置

2、散列函数

散列函数是构造散列表的关键,一般来说,散列函数应该有以下特点

一致性 同样的输入返回的结果是一致的,同样的,不同的输入返回的结果一般也不同(按我的理解可以相同,但这样的散列表没有意义)

有效性 散列函数只返回有效结果(不会有返回超出散列表范围的数据发生)

3、字典

字典是由一些关键字与对应的值组成的数值对进一步组成的集合,除非是多重字典,字典中任意两个数值对,关键字都不等

散列表很方便的实现了字典,但字典不是只能用散列表实现,还可以使用线性表和跳表的方法实现

跳表是一种扩充了额外(向前)指针的链表,本文暂不记录


http://www.ppmy.cn/news/1532154.html

相关文章

行内对齐 vertical-align

MDN vertical-align 在CSS中,文本的垂直对齐通常指的是行内元素(inline elements)或表格单元格中的内容如何相对于其容器进行上下对齐。对于这些情况,可以使用 vertical-align 属性来控制。 vertical-align 属性适用于以下几种情…

构建网络遇到的问题-AlexNet

1.对模型进行初始化采用的一般代码 def _initialize_weights(self):for m in self.modules(): # 遍历模型每一层if isinstance(m, nn.Conv2d): # 判定m层是否属于nn.Conv2d类型nn.init.kaiming_normal_(m.weight, modefan_out, nonlinearityrelu)if m.bias is not None:nn.in…

专深与广博的平衡艺术

一、引言 ----  随着人工智能(AI)和生成式人工智能(AIGC)如ChatGPT、Midjourney、Claude等大语言模型的快速发展,AI辅助编程工具正逐渐成为程序员日常工作的得力助手。这一变革不仅对编程工作方式产生了深远影响&…

在云渲染中3D工程文件安全性怎么样?

在云渲染中,3D工程文件的安全性是用户最关心的问题之一。随着企业对数据保护意识的增强,云渲染平台采取了严格的安全措施和加密技术,以确保用户数据的安全性和隐私性。 云渲染平台为了保障用户数据的安全,采取了多层次的安全措施。…

Redis系列补充:聊聊布隆过滤器(go语言实践篇)

1 介绍 布隆过滤器(Bloom Filter)是 Redis 4.0 版本之后提供的新功能,我们一般将它当做插件加载到 Redis Service服务器中,给 Redis 提供强大的滤重功能。 它是一种概率性数据结构,可用于判断一个元素是否存在于一个集…

【小bug】使用 RestTemplate 工具从 JSON 数据反序列化为 Java 对象时报类型转换异常

起因:今天编写一个请求时需要通过RestTemplate调用外部接口,获取一些信息,但是在获取了外部接口响应内容后,使用强制转换发现报了类型转换异常。之前也遇到过,但是没记录下来,今天又查了一遍……干脆记录一…

Tomcat中间件常见漏洞复现

#1.CVE-2017-12615 -----Tomcat put方法任意文件写入漏洞 1.打开靶场 cd vulhub/tomcat/CVE-2017-12615 docker-compose up -d docker ps 2.访问8080端口,来到靶场 3.首页进抓包,Tomcat允许适⽤put⽅法上传任意⽂件类型,但不允许jsp后缀…

@overload实际并无作用

overload 装饰器在 Python 中确实有些特殊。 虽然它看起来像是实现了函数重载,但实际上并没有真正改变函数的行为。 overload 主要用于类型提示和提高代码的可读性。 在 Python 中,函数重载(即根据参数类型或数量调用不同的函数实现&#xf…