数据结构与算法
一米阳光zw
没有能力,你会觉得全世界都在为难你
展开
-
经典算法题:两个线程交替输出1-100之间的数
【代码】经典算法题:两个线程交替输出1-100之间的数。原创 2023-02-03 14:22:28 · 180 阅读 · 0 评论 -
基于数组实现栈,再基于栈实现后缀表达式计算
【代码】基于数组实现栈,再基于栈实现后缀表达式计算。原创 2022-10-29 13:58:57 · 345 阅读 · 0 评论 -
堆排序
堆排序 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。首先简单了解下堆结构。 堆: 堆是具有以下性质的完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大顶堆;或者每个结点的值都小于或等于其左右孩子结点的值,称为小顶堆 该数组从逻辑上讲就是一个堆结构,我们用简单的公式来描述一下堆的定义就是: ...原创 2019-05-11 14:54:06 · 69 阅读 · 0 评论 -
快速排序QuickSort
该方法的基本思想是: 1.先从数列中取出一个数作为基准数。 2.分区过程,将比这个数大的数全放到它的右边,小于或等于它的数全放到它的左边。 3.再对左右区间重复第二步,直到各区间只有一个数。 快速排序的核心:就是从第二个数开始遍历数组的每个数,然后存下当前这个数temp,再次遍历该数的前面的每个数和 temp比较,然后将j赋值给j+1,最后将temp的值赋j。 快速排序称为分治法,但分治法这三个字...原创 2019-04-30 22:27:42 · 151 阅读 · 0 评论 -
链式存储的二叉树创建、遍历和查找
连式存储的二叉树结构图: 代码实现: //-----------------------------------------创建二叉树以及添加根节点测试类----------------------------------------------- package day0504; /** * @author Czw * @Description 创建一棵链式二叉树 * @Date 20...原创 2019-05-04 11:21:38 · 1265 阅读 · 2 评论 -
二叉树
二叉树:任何一个节点的子节点数量不超过2,二叉树的子节点分左节点和右节点,两个节点的左右节点不能颠倒 二叉树分为满二叉树和完全二叉树: 满二叉树:所有叶子节点都在最后一层,而且节点的总数为:2n-1(n是树的高度),例如下图中左方 完全二叉树:所有叶子节点都在最后一层或倒数第二层,且最后一层的叶子节点都在左边连续,倒数第二节也是节点在右边连续,如下图中的右方,如果(b)图中的9在右边,则不为完全二...原创 2019-05-04 10:53:42 · 112 阅读 · 0 评论 -
树状结构
树状结构:树状结构的查找性能和插入性能相对于线性结构效率要高些。例如线性存储结构数组和链表,若想在数组最前处插入元素比较麻烦(需将数组所有元素整体向后移),链表想在最后插入元素比较麻烦(若链表数据量大则需遍历很多数)。 相关的基本概念: 根节点:最上面的节点如上图中的A节点 双亲节点:节点中一对多的关系,例如B节点为EF节点的双亲节点 子节点:节点往下一层则为子节点,例如BCD节点为A节点的子节...原创 2019-05-03 21:14:53 · 293 阅读 · 0 评论 -
基数排序二维数组的实现以及使用队列优化
基数排序:基数排序分为两种,分别为LSD,MSD。LSD的基数排序适用于位数小的数列,如果位数多的话,使用MSD的效率会比较好。MSD的方式与LSD相反,是由高位数为基底开始进行分配,但在分配之后并不马上合并回一个数组中,而是在每个“桶子”中建立“子桶”,将每个桶子中的数值按照下一数位的值分配到“子桶”中。在进行完最低位数的分配后再合并回单一的数组中。例如2,32,685。他是按照数组中数字的位数...原创 2019-05-03 18:07:40 · 319 阅读 · 0 评论 -
归并排序
归并排序概叙:归并排序(MERGE-SORT)是建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。 分治法:在计算机科学中,分治法是一种很重要的算法。字面上的解释是“分而治之”,就是把一个复杂的问题分成...原创 2019-05-03 13:00:22 · 126 阅读 · 0 评论 -
选择排序
选择排序的核心:遍历数组找到数组中最小的数。选择排序改进了冒泡排序,每次遍历列表只做一次交换,为了做到这一点,一个选择排序在遍历时寻找最大的值,并在完成遍历后,将其放到正确的地方。第二次遍历,找出下一个最大的值。遍历n-1次排序n个项,最终项必须在n-1次遍历之后 **选择排序实现原理:**先遍历数组的每一个元素并将当前元素看作是最小元素且记录下标,然后再遍历当前元素后的所有元素,只要值比当前元素...原创 2019-05-02 14:59:53 · 137 阅读 · 0 评论 -
直接插入排序InsertSort
该方法的基本思想是: 1.先从数列中取出一个数作为基准数,记为x。 2.分区过程,将不小于x的数全放到它的右边,不大于x的数全放到它的左边。(这样key的位置左边的没有大于key的,右边的没 有小于key的,只需对左右区间排序即可) 3.再对左右区间重复第二步,直到各区间只有一个数 **概叙:**记录最左边的数下标标记为low,记录最右边数下标标记为high,取第一个数为标准,标准数为第一个。将标...原创 2019-04-27 22:40:36 · 207 阅读 · 0 评论 -
时间复杂度与空间复杂度
**时间复杂度:**一般情况下,算法中的基本操作语句的重复执行次数是问题规模n的某个函数,用T(n)表示,若有某个辅助函数f(n),使得当n趋近于无穷大时,T(n)/f(n)的极限值为不等于零的常数,则称为f(n)是T(n)的同级数量级函数。记做T(n)=O(f(n))为算法的渐进时间复杂度,简称时间复杂度。 语句频度T(n):一个算法中的语句执行次数称为语句频度,记为T(n). T(n)不同,但...原创 2019-04-27 20:26:18 · 416 阅读 · 0 评论 -
汉诺塔问题
汉诺塔问题分析: 我们在利用计算机求汉诺塔问题时,必不可少的一步是对整个实现求解进行算法分析。到目前为止,求解汉诺塔问题最简单的算法还是同过递归来求,至于是什么是递归,递归实现的机制是什么,我们说的简单点就是自己是一个方法或者说是函数,但是在自己这个函数里有调用自己这个函数的语句,而这个调用怎么才能调用结束呢?,这里还必须有一个结束点,或者具体的说是在调用到某一次后函数能返回一个确定的值,接着...原创 2019-04-26 23:51:07 · 293 阅读 · 0 评论 -
数据结构与算法
**什么是数据结构:**数据结构是指胡修昂之间存在着一种或多种关系的数据元素的集合和钙结合中数据元素之间的关系组成 数据结构分为两种: 一.数据的存储结构: 1.顺序存储结构:数据依次存储,仅存储数据,例如数组 2.链式存储结构:在存储数据的时候同时存储数据的顺序,即地址。 二.数据的逻辑结构: 1.集合结构:数据同在一个集合中,数据除了在同一个集合中外没有其他关系,关系比较独立 2.线性结构:...原创 2019-04-21 00:38:20 · 114 阅读 · 0 评论