前言 上篇博客我们讨论了栈和队列的有关结构,本篇博客我们继续来讨论有关栈和队列习题 这些题算是经典了 个人主页:小张同学zkf ⏩ 文章专栏:数据结构 若有问题 评论区见 思路已给出,代码如下 对于c语言来说,注意先把栈写好,写好后再调用栈的函数,后续c++就不用这么麻烦了 2.用队列实现栈 这道题就是给你两个队列,通过队列实现一个栈,我们都知道栈是后进先出的原则,而队列是先进先出的原则 q2,然后再将还在q1的元素通过出队的方式实现出栈,若继续入栈,此刻元素都在q2那么就用q2实现入栈操作,然后出栈时,按照上面的操作来回导入就可以了。 ,此刻栈为空 代码如下 3.用栈实现队列 两个队列可以实现栈,那两个栈如何实现队列那 队列是先进先出原则,那对于栈来说,后进先出,若两个栈,将第一个栈的所有元素全部导入第二个栈,此刻我们想想比如第一个栈原本 1,2,3,4,现在导入第二个栈此刻是不是就是4,3,2,1,此刻第二个栈若出栈的话正好符合了队列的先进先出 我们可以在画图看一下 其实对于两个栈,将第一个栈导入另一个栈,原本第一个栈的元素是后进先出的原则
在工作中由于时间关系,写得比较匆忙,想对代码进行整理和完善,自己也一直想能写点东西.所以有了写一个关于ffmpeg专题的想法, 同时对播放器进行完善, 使自己实现的播放器能和MediaPlayer简单切换 专题分为5个部分: 1 播放器基础知识 2 Android基础知识,主要是Android MediaPlayer会涉及到的一些知识 3 Android MediaPlayer的框架流程,代码分析 4 ffmpeg
数据结构–线性结构专题 于2020年11月25日由Sukuna发布 1 基础 1.数据,数据元素,数据对象,数据项,数据结构的概念 什么是基本单位,什么是最小单位,什么是所有能输入到计算机中并被计算机程序处理的符号总称 2.结构的分类? 逻辑结构:集合,线性表,树,图 物理结构:顺序存储结构,物理存储结构,索引存储结构,哈希存储结构 3.引用参数:&:可以扩展为指针 4.算法的五个特征 (1)有穷性 (2)可读性 (3)健壮性 (4)可行性 newbase==NULL) return OVERFLOW; //扩充失败 L.elem=newbase; L.listsize+=LISTINCREMENT; } 9. 3.1 栈 1.先进后出 2.栈顶和栈底的定义 3.栈顶的几个定义法: 和 的上一个单元:空栈时分别对应-1和0 4.进展顺序判断:第二斯特林数,溢出和下溢的判断 5.符号表达式和代替递归函数 6
, 如果是+, - 则直接入栈, 如果是*, / 则运算到栈顶元素上, 如果为字符则更新字符 第三步: 将数字一一提取出来, 然后直接运算即可. 示例1: 输入: root = [1,3,2,5,3,null,9] 输出: [1,3,9] 示例2: 输入: root = [1,2,3] 输出: [1,3] 提示: 二叉树的节点个数的范围是 [0,104] -231 <= Node.val <= 231 - 1 算法思路 依旧是利用层序遍历,但是这⼀次队列里面不单单存结点信息,并且还存储当前结如果在数组中存储所对应的下标(在我们学习数据结构 但是没有问题,因为 • 我们数据的存储是⼀个环形的结构; • 并且题目说明,数据的范围在 int 这个类型的最大值的范围之内,因此不会超出⼀圈; • 因此,如果是求差值的话,我们无需考虑溢出的情况。 总结 使用栈和广度优先搜索(BFS)算法都是常见的图形和树形结构遍历方法, 希望本文对大家有帮助~
1、概述 栈是一种==“先进后出”==的一种数据结构,有压栈出栈两种操作方式。 可以把栈这种数据结构理解成是手枪的弹夹。 压栈就好比是往弹夹中压子弹。 弹栈就好比是往子弹中退出子弹。 2、栈数据结构的代码体现 用LinkedList模拟栈的数据结构 public class MyStack { private LinkedList link; public MyStack() { link = new LinkedList(); } //压栈 //每次压倒栈顶 public void add(Object obj) { link.addFirst (obj); } //弹栈 //每次从栈顶取出 public Object get() { // return link.getFirst(); return link.removeFirst
大家好,又见面了,我是你们的朋友全栈君。 Java栈结构 概念 典型的栈结构如下图所示:栈结构只能在一端操作,该操作端叫做栈顶,另一端叫做栈底。 栈结构按照“后进先出”(Last In First Out, LIFO)的方式处理结点数据。 栈的特点: 其实栈结构是一种受限制的线性数据结构。 其限制是仅允许在表的一端进行插入和删除运算。 向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素; 从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。 所以当前的栈顺序是: 栈顶A->B->C->D栈顶 D执行完, 弹出栈. C/B/A依次弹出栈. 所以我们有函数调用栈的称呼, 就来自于它们内部的实现机制. (通过栈来实现的) 清楚了上面这个调用流程就应该知道栈的重要性了吧。在Java中已经跟我们封装好了 Stock类就是栈结构 栈的应用 首先了解一下栈中的常用方法?
出栈校验:遇到右括号就检查栈顶左括号是否匹配,匹配则出栈,不匹配则直接判定错误。通过栈的栈顶指针top(也就是数组的下标)管理元素的入栈、出栈操作。 【讲解步骤】整体解题分为3个核心步骤:我们采用数组模拟栈的方式实现括号匹配数组stack对应栈的存储空间,每个元素存储左括号[或(变量top作为“栈顶指针”,存储当前栈顶的下标初始“栈结构”构建(左括号入栈 调度规则:车厢从A→C后不能回A,从C→B后不能回C,本质是“栈的入栈不可逆、出栈不可逆”【讲解步骤】这个题目详细讲解“遍历目标序列a,通过栈的入栈/出栈操作,验证能否依次匹配每个目标车厢”。 top]=c++实现入栈:先将top上移(栈顶位置更新),再把当前待入栈的车厢c存入栈,最后c自增(指向下一节待调度的车厢)。 出栈操作——匹配成功,驶出到B当栈顶stack[top]等于目标a[i]时,说明车站C最前面的车厢正是需要驶出到B的车厢,执行出栈:用--top实现出栈:将top下移(栈顶位置更新,相当于移除栈顶元素,
数据结构–查找专题 于2020年11月9日2020年11月9日由Sukuna发布 查找表: 由同一类型的数据元素(记录)组成的集合。 小的往左走,大的往右走,遇到NULL就插入 ASL计算:同查找树 存储结构:跟二叉树一样 查找算法:大的往右,小的往左,找到了返回,遇到NULL就失败 插入算法: 删除算法:在二叉排序树中删除一个结点时
后进者先出,先进者后出,这就是典型的“栈”结构。 从栈的操作特性上来看,栈是一种“操作受限”的线性表,只允许在一端插入和删除数据。 如何实现一个“栈”? 栈主要包含两个操作,入栈和出栈,也就是在栈顶插入一个数据和从栈顶删除一个数据。理解了栈的定义之后,我们来看一看如何用代码实现一个栈。 实际上,栈既可以用数组来实现,也可以用链表来实现。 用数组实现的栈,我们叫作顺序栈,用链表实现的栈,我们叫作链式栈。 不管是顺序栈还是链式栈,我们存储数据只需要一个大小为 n 的数组就够了。 栈在表达式求值中的应用 我们再来看栈的另一个常见的应用场景,编译器如何利用栈来实现表达式求值。 为了方便解释,我将算术表达式简化为只包含加减乘除四则运算,比如:34+13*9+44-12/3。 this.backStack.isEmpty(); } } 内容小结 我的代码实现 https://gitee.com/kaiLee/struct/tree/master/src/main/java/com/s3 栈是一种操作受限的数据结构
栈的操作只能在线性表的表尾进行,这个标为被称为栈的栈顶top,相应的表头被称为栈的栈底bottom 栈的数据必须从栈顶进入,也必须从栈顶取出,先入栈的数据在后入栈的数据下面。 栈中不含有任何数据时的状态叫作空栈,此时栈顶top等于栈底bottom。 栈的定义 前面说过,作为一个线性结构,栈既可以用数组实现,也可以用链表实现。 在大多数情况下,我们用数组来实现栈。 ("There are no elements in stack"); return -111; } return stack[--top]; } 与所有数据结构一样,在执行增删操作之前 当top==0时,栈内没有元素,pop的操作将是非法的,所以需要返回一个无效值ERROR_ELEM_VALUE,在介绍“线性结构-数组”中,有一道“删除重复元素”的题目,当时将重复元素赋值为-111,也是同样的道理 来两道题 二/十进制转换 利用栈结构将二进制数转换为十进制数 利用栈的FILO特点,方便位权运算 首先将二进制数从高位到低位顺序入栈。然后从栈顶依次取出每一个元素。
栈中的数据元素遵守后进先出LIFO(Last In First Out)的原则。 压栈:栈的插入操作叫做进栈/压栈/入栈,入数据在栈顶。 出栈:栈的删除操作叫做出栈。出数据也在栈顶 2.栈结构的特点: 后进先出(LIFO):栈的最显著特点是后进先出的数据访问方式。 而在链式存储中,每个元素都有一个指向下一个元素的指针,形成了一个链式结构。 常见应用:栈在计算机科学中有着广泛的应用,包括函数调用栈、表达式求值、语法分析、内存管理等方面。 在算法和数据结构中,栈也是解决许多问题的重要工具。 内存管理:栈内存储在程序的运行时栈空间中,由编译器或解释器负责管理。入栈和出栈操作通常比较高效,并且不会导致内存碎片化。 总的来说,栈是一种简单但功能强大的数据结构,它的后进先出特性使其在许多领域都有着重要的应用。 栈结构通常是用顺序表来实现的,如果学会了顺序表和链表再来实现栈结构就行显得简单的多。
数据结构–排序专题 于2020年11月18日2020年11月18日由Sukuna发布 1.插入排序 算法基本思想 将待排序的记录插入到已排序的子文件中去,使得插入之后得到的子文件仍然是有序子文件 快速排序需要一个栈空间来实现递归。 若每次划分均能将文件均匀分割为两部分,则栈的最大深度为|log_2n|+1,所需栈空间为O(log_2n),即空间复杂度 S(n)= O (log2n)快速排序是不稳定的。 接着再取出,按照0-9的顺序,接着是十位,接着是百位 /* 基数排序 - 次位优先 */ /* 假设元素最多有MaxDigit个关键字,基数全是同样的Radix */ #define MaxDigit
前面我们实现了单链表,单链表只是链表的一种。可以根据以下几个标准来判断链表的类型:
在栈中,无论是存还是取,都必须遵循"先进后出原则" ==>栈是一种只能从表的一端存取数据,且遵循"先进后出"原则的线性存储结构 进栈和出栈 进栈:将数据存储到站里面 出栈:将数据从栈中间取出 栈的实现方法 栈:"特殊"的线性存储结构 1 顺序表 ==> 顺序栈(顺序存储结构) 2 链表 ==> 链栈(链式存储结构) 栈的应用 例: 撤销,返回功能 …等等 二.顺序栈 入栈: // **元素入栈 // 参数: 存储结构, 栈顶指针, 数据 // 返回值: 栈顶指针(需要知道结束入栈之后栈顶的位置) int pushElem(int* arr, int top, int val top; } 完整代码+测试: #include // **元素入栈 // 参数: 存储结构, 栈顶指针, 数据 // 返回值: 栈顶指针(需要知道结束入栈之后栈顶的位置) int pushElem **元素出栈 // 参数: 存储结构, 栈顶指针 // 返回值: 栈顶指针 int popElem(int* arr, int top); 三.链栈 一般将链表的头部作为栈顶 入栈: // **添加元素
Language models enable zero-shot prediction of the effects of mutations on protein function 论文摘要:
三 论文题目: Self-Supervised Pre-Training for Protein Embeddings Using Tertiary Structures 论文摘要: 蛋白质的三级结构在很大程度上决定了它与其他分子的相互作用 尽管在各种与结构相关的任务中非常重要,但完全监督的数据获取起来往往既耗时又昂贵。现有的预训练模型大多侧重于氨基酸序列或多序列比对,而结构信息尚未被充分利用。 本文提出了一种用于从蛋白质三级结构中学习结构嵌入的自监督预训练模型。天然蛋白质结构受到随机噪声的干扰,预训练模型的目的是估计扰动3D结构上的梯度。 作者在两个下游任务:蛋白质结构质量评估(QA)和蛋白质-蛋白质相互作用(PPI)位点预测上展示了该预训练模型的有效性。提取层次结构嵌入以增强相应的预测模型。 大量实验表明,这种结构嵌入一致地提高了两个下游任务的预测精度。
void createBT(BiTree *&b, char *s) //用括号表示法的字符串s生成二叉树b { BiTree *st[100], *t; //st存放树结点的栈 就是以树的根结点为轴心,将整棵树顺时针旋转一定角度,使之结构层次分明。 将左孩子结点的右孩子结点、右孩子结点的右孩子结点……都作为该结点的孩子结点,将该结点与这些右孩子结点用线连接起来; (2)删除原二叉树中所有结点与其右孩子结点的连线; (3)整理(1)和(2)两步得到的树,使之结构层次分明
python程序的分支结构 前言 程序的分支结构分为三种,分别是单分支结构,二分支结构,多分支结构。同时需要掌握条件判断及组合,程序的异常处理。 在Python的舞台上,分支结构以清晰简洁的语法展现,让你能够以一种直观的方式控制程序的流程。本篇技术博客将引导你深入探索Python程序中的分支结构,为你揭开这个编程世界中的一道神秘面纱。 无论你是初学者还是经验丰富的开发者,理解和灵活运用分支结构是提高代码可读性和功能性的关键一步。我们将深入研究条件语句、循环结构和异常处理,为你呈现一个全面的分支结构指南。 准备好迎接这场代码之旅,让我们一同揭示分支结构的精妙之处,掌握Python编程的更高层次。 一、单分支结构 根据判断条件结果而选择不同向前路径的运行方式。 无论是简单的条件语句,还是复杂的循环结构,每一行代码都是一次选择,每一个分支都是一次决策。通过理解和运用这些分支结构,我们能够使程序在不同的情境下表现出多样性和强大的适应性。
前言 本篇博客我们继续来讨论链表专题,今天的链表算法题是经典中的经典 个人主页:小张同学zkf ⏩ 文章专栏:数据结构 若有问题 评论区见 欢迎大家点赞收藏⭐文章 1.判断链表是否有环 第三步尾插新链表,将拷贝在原链表的节点尾插新链表,并返回新链表的头结点 代码如下 这道题整体代码如下 相当于三个while嘛,一个while循环一步 结束语 链表有关算法题也就总结完了,从链表专题