数据结构与算法
淡蓝色_mmm
这个作者很懒,什么都没留下…
展开
-
两个栈实现队列,两个队列实现栈
两个栈实现队列队列每次只能删除头,只能在末尾添加,“先进先出”原则 栈“先进后出”package queue;import java.util.Stack;//用“栈”实现队列public class QueueTest<T> { // 向队列添加数据时:(01) 将“已有的全部数据”都移到mIn中。 (02) 将“新添加的数据”添加到mIn中。 p...原创 2018-04-23 14:43:55 · 170 阅读 · 0 评论 -
链表生成栈和队列
结点类class Node { int val; Node next; public Node(int x) { val = x; next = null; } }栈class Stack { Node top; publi...原创 2018-04-24 11:35:01 · 215 阅读 · 0 评论 -
冒泡排序快速排序直接插入排序
冒泡排序遍历若干次要排序的数列,每次遍历时,它都会从前往后依次的比较相邻两个数的大小;如果前者比后者大,则交换它们的位置。这样,一次遍历之后,最大的元素就在数列的末尾! 采用相同的方法再次遍历时,第二大的元素就被排列在最大元素之前。重复此操作,直到整个数列都有序为止!冒泡排序时间复杂度冒泡排序的时间复杂度是O(N2)。 假设被排序的数列中有N个数。遍历一趟的时间复杂度是O(N),需要...原创 2018-04-24 17:38:13 · 339 阅读 · 2 评论 -
希尔排序
希尔排序实质上是一种分组插入方法。 它的基本思想是: 对于n个待排序的数列,取一个小于n的整数gap(gap被称为步长)将待排序元素分成若干个组子序列,所有距离为gap的倍数的记录放在同一个组中; 然后,对各组内的元素进行直接插入排序。 这一趟排序完成之后,每一个组的元素都是有序的。 然后减小gap的值,并重复执行上述的分组和排序。重复这样的操作,当gap=1时,整个数列就是有序的。由...原创 2018-04-26 21:30:34 · 164 阅读 · 0 评论 -
【算法题】Java单链表的逆序(递归和非递归方式)
循环方式在不使用额外存储节点的情况下使一个单链表的所有节点逆序?我们先用迭代循环的思想来分析这个问题,链表的初始状态如下 初始状态,prev是NULL,head指向当前的头节点A,next指向A节点的下一个节点B。首先从A节点开始逆序,将A节点的next指针指向prev,因为prev的当前值是NULL,所以A节点就从链表中脱离出来了,然后移动head和next指针,使它们分别指向B节...原创 2018-06-02 18:04:33 · 2337 阅读 · 0 评论 -
常见数据结构及复杂度Java实现
选择数据结构Array (T[])当元素的数量是固定的,并且需要使用下标时。Linked list (LinkedList)当元素需要能够在列表的两端添加时。否则使用 List。Resizable array list (List)当元素的数量不是固定的,并且需要使用下标时。Stack (Stack)当需要实现 LIFO(Last In First Out...原创 2018-06-03 22:04:08 · 2880 阅读 · 2 评论 -
数据库索引以及索引的实现(B+树介绍,和B树,区别)
索引索引是提高数据库表访问速度的方法。分为聚集索引和非聚集索引。聚集索引:对正文内容按照一定规则排序的目录。非聚集索引:目录按照一定的顺序排列,正文按照另一种顺序排列,目录与正文之间保持一种映射关系。把数据库索引比作字典查询索引,聚集索引就是按照拼音查找,拼音栏中字的顺序就是查找得到的字的顺序。非聚集索引就像按照偏旁部首查找,同是单人旁查到的字所在的页码可能是杂乱的,没...原创 2018-06-22 14:51:08 · 1934 阅读 · 2 评论 -
《剑指Offer》之二叉树系列(1)
1.输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)分析: 判断root1和root2的根结点是否相同,相同则进一步判断root1的子树和root2的子树是否相同。 root1和root2的根结点不同,则用roo1的左右子树跟root2比较,直到root1为空时结束。当root1为null 且root2不为null,返回false; 当roo...原创 2018-08-19 20:45:36 · 226 阅读 · 0 评论