数据结构与算法概述

1.算法概述

算法:在计算机领域⾥,算法是⼀系列程序指令,⽤于处理特定的运算和逻辑问题。 衡量算法优劣的主要标准是时间复杂度和空间复杂度。

  • 时间复杂度:对⼀个算法运⾏时间⻓短的量度,⽤⼤O表示,记作T(n)=O(f(n))。 常⻅的时间复杂度按照从低到⾼的顺 序,包括O(1)、O(logn)、O(n)、O(nlogn)等。
  • 空间复杂度:对⼀个算法在运⾏过程中临时占⽤存储空间⼤⼩的量度, ⽤⼤O表示,记作S(n)=O(f(n))。 常⻅的空间复杂度按照从低到⾼的顺序,包括O(1)、O(n)等。 其中递归算法的空间复杂度和递归深度成正⽐。
数据结构 :数据结构是数据的组织、管理和存储格式,其使⽤⽬的是为了⾼效地访问和修改数据。 数据结构包含数组、链表这样的线性数据结构,也包含树、图这样的复杂数据结构。

2.数据结构概述

  • 数组:由有限个相同类型的变量所组成的有序集合,它的物理存储⽅式是顺序存储,访问⽅式是随机访问。利⽤下标查找数组元素的时间复杂度是O(1),中间插⼊、删除数组元素的时间复杂度是O(n)。
  • 链表:⼀种链式数据结构,由若⼲节点组成,每个节点包含指向下⼀节点的指针。链表的物理存储⽅式是随机存储, 访问⽅式是顺序访问。查找链表节点的时间复杂度是O(n),中间插⼊、删除节点的时间复杂度是 O(1)。
  • 栈:⼀种线性逻辑结构,可以⽤数组实现,也可以⽤链表实现。栈包含⼊栈和出栈操作,遵循先⼊后出的原则(FILO)。
  • 队列:⼀种线性逻辑结构,可以⽤数组实现,也可以⽤链表实现。队列包含⼊队和出队操作,遵循先⼊先出的原则 (FIFO)。
  • 散列表:也叫哈希表,是存储Key-Value映射的集合。对于某⼀个Key,散列表可以在接近O(1)的时间内进⾏读写操作。 散列表通过哈希函数实现 Key和数组下标的转换,通过开放寻址法和链表法来解决哈希冲突。
  • 树:n个节点的有限集,有且仅有⼀个特定的称为根的节点。当n>1时,其余节点可分为m个互不相交的有限集,每⼀个集合本身⼜是⼀个树, 并称为根的⼦树。
  • ⼆叉树:树的⼀种特殊形式,每⼀个节点最多有两个孩⼦节点。⼆叉树包含完全⼆叉树和满⼆叉树两种特殊形式。 ⼆叉树的遍历⽅式有⼏种:根据遍历节点之间的关系,可以分为前序遍历、中序遍历、后序遍历、层序遍历这4种⽅式;从更宏观的⻆度划分,可 以划分为深度优先遍历和⼴度优先遍历两⼤类。
  • ⼆叉堆:是⼀种特殊的完全⼆叉树,分为最⼤堆和最⼩堆。 在最⼤堆中,任何⼀个⽗节点的值,都⼤于或等于它左、右孩⼦节点的值;在最⼩堆中,任何⼀个⽗节点的值,都⼩于或等于它左、右孩⼦节点的值。
  • 优先队列:分为最⼤优先队列和最⼩优先队列。在最⼤优先队列中,⽆论⼊队顺序如何,当前最⼤的元素都会优先出队,这是基于最⼤堆实现的;在最⼩优先队列中,⽆论⼊队顺序如何,当前最⼩的元素都会优先出队,这是基于最⼩堆实现的。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值