![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
算法与数据结构
文章平均质量分 92
自动AC机
这个作者很懒,什么都没留下…
展开
-
队列、循环队列、单调队列
队列类似于栈,也是一种受限制的线性表,只允许在一段插入另一端删除,因此队列的特性为。插入元素被称为入队,删除元素被称为出队。如下图为队列的逻辑结构。队列与栈一样可以用链式结构和数组来模拟,两者都需要头指针和尾指针来确定队列的首尾。初始时设定队头与队尾都为0(后面判断队列为空也可以使用队头队尾是否相同来),当有元素插入时,元素插入队尾出然后队尾后移;当有元素出队时,队头指针后移即可。原创 2023-08-23 23:11:17 · 49 阅读 · 0 评论 -
时间复杂度计算
王道中有三重循环的题,可以将三重循环建立在空间坐标轴上,将它们理解为i是变量确定j,j确定后再确定k,那么由线到i-j组成等腰直角三角形,再到i-j-k行程单三棱柱。如下代码,两者皆是单循环,但是时间复杂度不同,第一个由于循环次数是已知的,因此时间复杂度是O(1),而后者时间复杂度是O(n)。如下所示,其递归形成的数据结构可以理解为单链表,所以叶子数为1,层数为n,f(n)=n时间复杂度为O(满足一下的形式可以使用主定理,其中当n是常数时时间复杂度为O(1),n大于该常数时带入公式。原创 2023-08-11 23:43:33 · 433 阅读 · 1 评论 -
结构体链表与数组模拟链表
链表分为单链表、双向链表和循环链表,这三种数据结构本质上就是指针的灵活使用,只要理解了单链表的一些操作,那么剩下两种也能快速掌握。单链表的每一个节点不同于数组是连续的,。单链表通常由一个头指针指向单链表的第一个节点,每个节点通常是一个结构体,结构体内部包含一个指针,该指针指向下一个地址。在初始化创建单链表时有两种方式,一种是不包含头结点的(上方),一种是包含头结点的(下方)。原创 2023-08-14 00:42:23 · 207 阅读 · 0 评论 -
栈、共享栈、单调栈
栈可以理解为是一种受约束的线性表或链表,他们都是线性存储的,但是栈必须满足。与单链表类似,栈可以使用数组模拟和链式存储,数组模拟通常以数组,而链式则以。如下所示,左边为数组模拟栈的逻辑结构,右边为链式存储栈的逻辑结构,由于栈只进行头部操作,因此是否使用头结点效果一样。栈的一切操作都与top指针有关。如下图1所示,当创建栈时初始化该数据结构,将top指针指向-1的位置如图2~6所示,分别表示使用栈进行入栈出栈操作,这两种操作都是让指针进行上下移动来完成此项操作的。原创 2023-08-16 23:30:18 · 72 阅读 · 1 评论 -
树状数组的三种操作+例题应用
在写算法题时进场能碰到要求求一段区间的数据和或者修改区间内某一个数据,如果使用数组纯累加的话,求和:O(N),修改:O(1),如果有多组查询可能会TLE。而前缀和刚好相反,求和:O(1),修改:O(N),同样的如果遇到多组修改依然容易TLE。而树状数组刚好是一种折中的数据结构,它让求和与修改的时间复杂度都为O(logN)。区间查询,单点修改;区间修改,单点查询;区间修改,区间查询。原创 2023-03-19 14:00:03 · 306 阅读 · 0 评论