数据结构知识点

1、线性表

概念:是一种基本的数据结构,它是由 n (n ≥ 0) 个数据元素组成的有限序列。这些元素按照一定的顺序排列,相邻元素之间存在前驱和后继关系

  • 顺序表:一组地址连续的存储单元依次存储线性表的数据元素。主要特点是元素在内存中的存储是顺序的,可以通过下标直接访问任意位置的元素,时间复杂为 O(1)
  • 链表:由一系列节点(Node)组成,每个节点包含数据和指向下一个节点的引用(或链接)。链表与顺序表不同,不需要在内存中连续的位置,通过节点之间的引用来连接。
    • 单向链表:每个节点包含数据和一个指向下一个节点的引用,最后一个节点的引用指向空(null)。
    • 双向链表:每个节点包含数据,一个指向下一个节点的引用,以及一个指向前一个节点的引用,头节点的前向引用和尾节点的后向引用都指向空。

链表优点与缺点:链表的优点之一是插入和删除元素相对较为高效,时间复杂 O(1),因为不需要像数组那样移动大量元素。然而,链表的缺点是访问元素时需要从头节点开始遍历,没有直接访问特定位置的能力,这导致随机访问效率较低,时间复杂 O(N)

2、数组

概念:基于连续内存空间的数据结构,数组的每个元素在内存中都是相邻存储的,它们的索引通过整数偏移量来访问,通过计算偏移量,可以直接访问数组中的任意元素。

  • 访问:索引访问数组元素O(1),因为可以直接计算出元素的地址,从而以常数时间访问数组中的任何位置的元素。
  • 搜索:线性搜索的时间复杂度是 O(n),n 是数组的长度。在最坏情况下,需要遍历整个数组才能找到目标元素。
  • 插入:在末尾插入元素的时间复杂度是 O(1),因为不需要移动其他元素。在数组中间或开头插入元素时,需要将插入位置后面的所有元素向后移动时间复杂度是 O(n)。
  • 删除:删除元素的时间复杂度取决于删除的位置。在末尾删除元素的时间复杂度是 O(1),在数组中间或开头删除元素时,需要将删除位置后面的所有元素向前移动,时间复杂度是 O(n)。

3、栈

概念:基于数组或链表,遵循先进后出的原则

  • 数组:遵循数组时间复杂度,因为队列不要求元素在数组中是连续存储的,只需维护一个指向队列头部的索引,每次出队时将该索引向后移动一个位置即可,所以删除的时间复杂度为 O(1)。
  • 链表(双链表):遵循双向链表时间复杂度。

4、队列

概念:基于数组或链表,遵循先进先出的原则

  • 数组:遵循数组时间复杂度,因为队列不要求元素在数组中是连续存储的,只需维护一个指向队列头部的索引,每次出队时将该索引向后移动一个位置即可,所以删除的时间复杂度为 O(1)。
  • 链表(双链表):遵循双向链表时间复杂度。

5、倒排索引

概念:用于快速查找文档中包含特定词汇,主要思想是将文档中的词汇映射到文档的位置。

基本原理与构造过程

  • 收集:收集需要建立倒排索引的文档集合。
  • 分词:对每个文档进行分词,将文档拆分为一组单词或词汇项。
  • 建立索引:对每个词汇项,构建一个映射,将该词汇项映射到包含该词汇项的文档列表。这个映射关系称为倒排列表。
  • 排序:对倒排列表中的文档进行排序,通常按照文档的标识符或其他可排序的方式。

6、位图

概念:位图是一种简单而有效的数据结构,它由二进制位组成,每个位代表某种状态或标记。在计算机中,位图常常用于表示集合、布尔向量或进行位运算。如果某个元素在集合中,对应位置的位就被置为1;否则,位为0。

PS

逻辑地址:逻辑地址是程序员和编译器使用的抽象地址。

物理地址:物理地址是硬件使用的实际地址。

两者联系:逻辑地址需要通过地址映射或转换(由 MMU 执行)来变成物理地址。

MMU:管理计算机的内存,实现虚拟地址到物理地址的转换,并进行内存保护、访问权限控制等操作。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值