找回密码
 立即注册
搜索
热搜: 活动 交友
查看: 333|回复: 0

ACSL -> 数据结构

[复制链接]

1

主题

5

回帖

86

积分

版主

积分
86
发表于 3-15-2025 22:17:46 | 显示全部楼层 |阅读模式
1. 栈(Stack)
栈是一种线性数据结构,遵循后进先出的原则。它只允许在一端(栈顶)进行数据的插入和删除操作。比如你倒水到水杯里,然后喝水。
特点:

  • 基本操作包括 PUSH(将元素压入栈顶)和 POP(从栈顶弹出元素)。
  • 栈顶是唯一可以访问的位置,栈底是固定的。
PUSH("A")的命令将键"A"放在队列的顶部;命令"X=POP()"从队列的底部移除项,并将其值存储到变量X 中。
2. 队列(Queue)
队列是一种线性数据结构,遵循先进先出的原则。它允许在一端(称为队尾)插入元素,在另一端(称为队头)删除元素。
特点:

  • 基本操作包括 PUSH(将元素插入队尾)和 POP(从队头删除元素)。
  • 插入、删除和查询时:找出在项目列表中是否发现了特定项目,如果没有,则找出哪个项目与所讨论的项目接近
Example: 实现一个循环队列。

  • Func1():将元素插入队尾。
  • Func2():删除队头元素并返回。
  • Func3():检查队列是否为空。
  • Func4():检查队列是否已满。
  • 当队尾指针到达数组末尾时,将其重置到数组开头,实现循环。
  • 通过队头和队尾指针的位置判断队列是否为空或已满。
3. 二叉搜索树(BinarySearch Tree, BST)
二叉搜索树是一种非线性数据结构,每个节点最多有两个子节点(左子节点和右子节点)。对于任意节点,左子树的所有节点值都小于该节点的值,右子树的所有节点值都大于该节点的值。
特点:

  • 支持高效的查找、插入和删除操作,时间复杂度为     O(log n)。
  • 常用遍历法: 中序遍历 -> 先遍历左子树,然后访问当前节点,最后遍历右子树, 可以得到一个小到大的序列。
4.堆(Heap)
堆是一种特殊的完全二叉树,它满足以下性质:

  • 堆序性质:对于最大堆,每个节点的值都大于或等于其子节点的值;对于最小堆,每个节点的值都小于或等于其子节点的值。
  • 完全二叉树性质:除了最后一层,其他层都是满的,且最后一层的节点尽可能靠左排列。
堆通常用于实现优先级队列,支持高效地插入元素和删除最大(或最小)元素。
特点:
堆序性质:


        
    • 最大堆:父节点的值 ≥ 子节点的值。
        
    • 最小堆:父节点的值 ≤ 子节点的值。
完全二叉树:


        
    • 堆的存储结构紧凑,通常用数组实现。
        
    • 对于数组中的第 i 个元素:左子节点:2i + 1, 右子节点:2i + 2, 父节点:(i - 1) / 2
高效操作:


        
    • 插入元素的时间复杂度:O(log n)
        
    • 删除最大(或最小)元素的时间复杂度:O(log n)
        
    • 查找最大(或最小)元素的时间复杂度:O(1)





您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|RealDevClub ( 沪ICP备2024093864号-1 )

GMT+8, 4-12-2025 09:38 , Processed in 0.058701 second(s), 21 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表