数据结构与算法
数据结构与算法相关
Amon O_*
这个作者很懒,什么都没留下…
展开
-
栈和队列相关算法题(Java)
所用示例均出自力扣https://leetcode-cn.com/用队列实现栈思路:创建两个队列,一个用于输入in,一个用于输出out。添加的时候将数据加到in中,然后将out中的数据都加到in中,此时in队列的头就是刚压入的数。再将in, out互换,保证压入队列为空。对输出队列进行poll(),peek()等操作。补:队列的相关操作add 增加一个元索 如果队列已满,则抛出一个IIIegaISlabEepeplian异常remove原创 2020-07-23 11:06:42 · 381 阅读 · 0 评论 -
栈的相关操作
简介:栈是一个先入后出的有序列表,限制线性表中元素的插入和删除都只能在线性表的同一端进行的一种特殊线性表。应用场景:子程序的调用,递归调用,表达式的转换,二叉树的遍历,深度优先搜索…数组模拟栈:思路:定义一个top表示栈顶,初始化为-1;入栈:当有数据加入栈时,top++, stack[top]=data;出栈:int value = stack[top]; top–; return value;//定义一个 ArrayStack 表示栈class ArrayStack { priva原创 2020-07-22 20:36:18 · 123 阅读 · 0 评论 -
链表经典算法题(Java)
求单链表中有效节点的个数(如果有头结点,不统计头结点)public static int getLenth(Node head){ if (head.next == null) { return 0; } int lenth = 0; //让辅助指针指向头结点的下一个,就没有统计头结点 Node temp = head.next; while(temp != null){原创 2020-07-22 10:15:07 · 448 阅读 · 0 评论 -
双向链表的相关操作
双向链表简介:双向链表是包含向前指针的单链表,可以向前向后查找;单链表删除时需要借助辅助节点temp,而双向链表可以自我删除。双向链表的应用实例遍历:和单链表相同,只是可以向前,也能向后;添加:默认添加到链表最后;先找到最后一个节点temp.next = newNode;newNode.pre = temp; public void add(HeroNode2 heroNode){ //因为head节点不能动,需要一个辅助变量遍历temp He原创 2020-07-21 14:26:41 · 89 阅读 · 0 评论 -
单链表的相关操作
简介:链表是有序的列表链表是以节点的方式进行存储,链式存储;每个节点包含data域和next域(指向下一个节点);链表的各个节点不一定是连续存储;链表分带头节点的链表和没有头节点的链表(头节点不存放数据,作用就是表示单链表头)。单链表的应用实例:添加(创建):创建一个head头节点,作用就是表示单链表的头每添加一个节点就将其加到链表的最后遍历:因为头节点不能动,创建一个辅助指针temp进行遍历直到temp.next为空,即到了最后一个节点,结束遍历,否则将下一个的位置赋原创 2020-07-21 09:18:37 · 69 阅读 · 0 评论 -
数组模拟队列
队列介绍:队列是一个有序列表,可以用数组或者链表来实现;遵循先入先出的原则。数组模拟队列:队列本质是有序列表,若使用数组结构来存储队列的数据,则需要声明两个指针和一个最大容量:front,rear,MaxSize.front及rear分别记录队列前后端的下标,front指向队列第一个数据前一个的位置,rear指向队列中最后一个数字的位置。front会随着数据输出而改变,而rear则是随着数据输入而改变当我们将数据存入队列时称为”addQueue”,addQueue的处理需要有两个步骤:1)将原创 2020-07-20 18:04:23 · 56 阅读 · 0 评论 -
递归与回溯
递归特点:可以将一个大规模的问题不断的变小,然后进行推导的过程,是一种调用自身函数的算法。解题步骤:判断当前情况是否非法,如果非法就立即返回,这一步也被称为完整性检查(Sanity Check)。例如,看看当前处理的情况是否越界,是否出现了不满足条件的情况。通常,这一部分代码都是写在最前面的。判断是否满足结束递归的条件。在这一步当中,处理的基本上都是一些推导过程当中所定义的初始情况。将问题的规模缩小,递归调用。在归并排序和快速排序中,我们将问题的规模缩小了一半,而在汉诺塔和解码的例子中,我们将问原创 2020-05-29 12:43:53 · 239 阅读 · 0 评论 -
排序
冒泡排序具体操作:每一轮,从杂乱无章的数组头部开始,每两个元素比较大小并进行交换,直到这一轮当中最大或最小的元素被放置在数组的尾部,然后不断地重复这个过程,直到所有元素都排好位置。其中,核心操作就是元素相互比较。代码示例:void sort(int[] nums) { //定义一个布尔变量 hasChange,用来标记每轮遍历中是否发生了交换 boolean hasChange = true; //每轮遍历开始,将 hasChange 设置为 false for原创 2020-05-28 15:19:40 · 82 阅读 · 0 评论 -
常用数据结构
数组优点:构建简单,在O(1)的时间里根据数组的下标查询某个元素。缺点:构建时必须分配一段连续的空间,增删查需要耗费O(n)的时间。链表优点:灵活的分配内存空间,在O(1)的时间内添加或者删除元素缺点:查询需要O(n)时间解题技巧:利用快慢指针(链表的翻转,)...原创 2020-05-27 15:42:33 · 147 阅读 · 0 评论