20k18 分钟

# 算法性能分析 时间复杂度描述了算法执行所需指令数量随着输入数据规模增长的变化趋势。它是一个理论概念,用于预测算法在不同规模输入下的性能表现,更好的时间复杂度通常意味着在相同条件下,算法的运行时间更短。 空间复杂度描述了算法执行过程中所需额外内存空间随着输入数据规模增长的变化趋势。它同样是一个理论概念,用于评估算法的内存使用效率,更好的空间复杂度意味着在相同条件下,算法占用的空间更少。 大 O 表示法是一种用来描述算法性能的数学符号,它提供了算法时间或空间需求的上界估计。通过忽略算法复杂度表达式中的低阶项和常数因子,大 O 表示法简化了对算法性能的分析,这种简化使得算法的渐进行为(随着输入规
14k13 分钟

# 二叉搜索树的定义 二叉树的定义: 二叉树是一种分层的数据结构,其中每个节点最多有两个子节点。这种结构允许每个节点有两个分支,分别指向其左子树和右子树。 二叉树的特殊形态: 完全二叉树(Complete Binary Tree):如果二叉树的高度为 h,除了第 h 层之外,所有层的节点数都达到最大,且第 h 层的节点从左到右连续排列,这样的树被称为完全二叉树。 满二叉树(Full Binary Tree):如果二叉树的每一层的节点数都达到最大,包括最底层,这样的树被称为满二叉树。 二叉搜索树(Binary Search Tree, BST): 二叉搜索树是一种特殊的二叉树,具有以下性质:
20k18 分钟

# 哈希的相关概念 哈希(Hash)是一个数学概念,而哈希表(Hash Table)是一种基于哈希的数据结构。 这两个概念虽然密切相关,但它们在本质上是不同的。哈希表是哈希概念的一种应用,但不应将两者混淆。 哈希映射 是一种特殊的转换过程,它将任意大小的输入(定义域)转换成固定长度的输出(值域)。这个过程的本质是将无限的输入空间映射到有限的输出空间。 定义域:是无限的,可以是任何大小的数据。 值域:是固定长度的,通常表现为整数或字符串。 哈希值 是通过哈希过程得到的固定长度的输出,它是哈希表中存储数据的关键。 哈希函数,也称为哈希算法或哈希方法,是实现哈希映射的核心,它定义了如何将无限的输
17k15 分钟

# 队列的定义及其基本操作 队列是一种遵循先进先出(FIFO, First In First Out)原则的线性数据结构,广泛应用于计算机科学和日常生活中。以下是对队列及其基本操作的详细描述: 入队(Enqueue):在队列的末端(队尾)添加一个新元素。这个操作总是将新元素放在队列的最后。 出队(Dequeue):在队列的前端(队头)删除一个元素。执行出队操作后,原本位于队头之后的元素将成为新的队头。 访问队头元素(Peek):访问但不删除队列的第一个元素,允许用户查看队列的前端元素而不影响队列本身。 判空(IsEmpty):检查队列是否为空,即队列中是否没有任何元素。 判满(IsFull)
12k11 分钟

# 栈的定义 栈是一种操作受限的线性数据结构,它遵循后进先出(LIFO, Last In First Out)的原则。在栈中,所有新增、删除和访问操作都仅限于栈的一端,称为栈顶(Top)。 栈的基本操作: 入栈 / 压栈(Push):在栈顶添加一个新元素。新元素成为新的栈顶元素,而原有的栈顶元素及其下面的元素被 “压入” 栈底。 出栈(Pop):从栈顶删除一个元素。删除操作后,原来的次栈顶元素成为新的栈顶元素。 访问栈顶元素(Peek/Top):返回栈顶元素的值,但不从栈中移除它。 判空(IsEmpty):判断栈是否为空,即栈顶是否有元素。 判满(IsFull):判断栈是
12k10 分钟

# 单链表的基本概念 结点(Node):结点是单链表中用于存储数据的基本单元。每个结点通常包含两个部分:数据域和指针域。数据域用于存储数据,而指针域则用于存储指向下一个结点的指针。 头结点(Head Node): 头结点是一种特殊的结点,也称为虚拟结点或哨兵结点。它通常不存储数据,或者可以存储链表的元数据,如链表长度。 在带有头结点的链表中,头结点是链表的第一个结点,它的存在可以简化链表操作的逻辑。 尾结点(Tail Node):尾结点是链表中的最后一个结点。它仍然包含数据域,但指针域指向 NULL ,表示链表的结束。 头指针(Head Pointer): 头指针是指向单链表第一个
36k33 分钟

# 指针基础 在 C 语言中,指针和指针变量通常被视为相同的概念,但在严格意义上,它们有细微的区别: 指针 指的是内存中的一个地址,它是虚拟内存空间中某字节的唯一标识。 指针变量 则是专门用来存储这个地址的变量。指针变量本身也具有自己的内存地址,并且内部存储的数据是它所指向的内存地址。 # 指针的初始化 直接地址赋值:最常见的初始化方法是将一个变量的地址赋值给指针变量。这允许指针直接指向该变量的内存位置。 使用 NULL 进行初始化:指针变量可以被初始化为 NULL,这是一个特殊的字面值常量,表示指针不指向任何有效的内存地址。在大多数平台上,NULL 实际上等同于地址值 0。尝试操作 N
15k14 分钟

# 结构体 # 结构体基本的定义形式 结构体的基本定义形式如下: struct <结构体名> { <成员类型> <成员名>; ...} <结构体变量>;这种格式定义了一个新的数据类型,称为 结构体名 ,并同时可以定义一个或多个该类型的变量。 以下是一个名为 Person 的结构体类型定义示例: struct Person { char *name; int age; char *id;};在定义结构体类型的同时,可以定义该类型的变量。例如: struct Person&#
30k28 分钟

# 字符串 # 字符串的本质 在 C 语言中,字符串字面值是一种特殊的数据表示形式,其本质是以空字符( '\0' )结尾的字符数组。 字符串字面值通常存储在程序的 数据段 中。数据段是程序内存布局的一部分,用于存储程序的全局变量和静态变量。 数据段可以进一步细分为两个区域: 静态数据段:存储程序中的静态数据,如全局变量和静态局部变量。这个区域的数据具有可读可写的特性。 只读数据段:存储程序中只能读取、不可修改的常量。字符串字面值的字符数组就存储在这个区域,其数据是只读的。 字符串字面值的字符数组具有 静态存储期限,这意味着它们从程序开始执行时就存在,直到程序结束。这种存储期
9.3k8 分钟

# 数据结构中的两个核心概念 数据结构是组织和存储数据以供程序处理的重要方式。它们可以从两个核心概念来理解:逻辑结构和物理结构。 逻辑结构: 逻辑结构是指数据元素之间的逻辑关系,它定义了数据元素是如何相互关联的。 例如,线性表 是一种数据结构,其中数据元素之间存在一对一的关系。这使得线性表在处理有序数据时非常有用。 另一个例子是 树型结构,它是一种层次化的节点集合,其中每个节点(除了根节点)都有一个明确的父节点。这种结构在表示具有包含或分类关系的数据时非常有用。 物理结构: 物理结构是指数据元素在存储介质上的实际存放方式,它影响着数据的访问和操作效率。 对于线性表,有两种常见的物理实现: