
数据结构与算法
文章平均质量分 54
数据结构与算法
小小本科生debug
但日子还长,机会也还会有的,不用总是匆匆忙忙那么慌张。
展开
-
排序算法总结
排序算法总结原创 2021-10-27 12:29:29 · 215 阅读 · 0 评论 -
算法分析(时间复杂度、空间复杂度)
时间复杂度及主定理详解https://zhuanlan.zhihu.com/p/338460528原创 2021-10-26 18:41:39 · 943 阅读 · 1 评论 -
二叉树的遍历 深度优先遍历、广度优先遍历、递归、非递归
二叉树的遍历一:二叉树的存储结构定义二:深度优先遍历1:先序遍历2:中序遍历3:后序遍历三:广度优先遍历一:二叉树的存储结构定义 public static class Node { int val; Node left; Node right; public Node(int val) { this.val = val; } }二:深度优先遍历1:先序遍历递归 pub原创 2021-08-14 23:31:19 · 678 阅读 · 8 评论 -
排序算法之归并排序
归并排序一:概念二:递归实现三:非递归实现一:概念归并排序(Merge sort)是建立在归并操作上的一种有效的排序算法,归并排序对序列的元素进行逐层折半分组,然后从最小分组开始比较排序,合并成一个大的分组,逐层进行,最终所有的元素都是有序的二:递归实现具体代码实现:process()函数就是每次都把序列分成两部分,这样无限细分下去;merge()函数就是精髓所在,对每一个分出的序列进行排序; // 递归方法实现 public static void mergeSort1(int[]原创 2021-08-06 11:39:00 · 1898 阅读 · 0 评论 -
排序算法之冒泡排序
冒泡排序大名鼎鼎的冒泡排序。。。冒泡排序是交换排序思想的一种具体实现。1.算法介绍它是通过一系列的“交换”动作完成的。首先第一个关键字和第二个关键字比较,如果第一个大,则二者交换,否则不交换;然后第二个关键字和第三个关键字比较,如果第二个大,则二者交换,否则不交换……。一直按这种方式进行下去,最终最大的那个关键字被交换到了最后,一趟起泡排序完成。经过多趟这样的排序,最终使整个序列有序。这个过程中,大的关键字像石头一样“沉底”,小的关键字像气泡一样逐渐向上“浮动”,起泡排序的名字由此而来。动态实现图原创 2021-08-05 17:47:07 · 162 阅读 · 0 评论 -
排序算法之快速排序
快速排序一:荷兰国旗问题二:快速排序(递归实现)一:荷兰国旗问题在引入快速排序之前呢,我们先看一个经典的荷兰国旗问题。直观的“分三块”的问题。需求:给定一个待排序列arr[ ],给定一个数num,经过排序把arr[ ]划分成小于num ; 等于num ; 大于num 三部分。要求额外空间复杂度O(1),时间复杂度O(N)。分析如下:在arr[ ]左边设置一个小于区,在右边设置一个大于区,不断向中间逼近,最终中间就是相等的数字。操作过程如下:具体代码实现: // 荷兰原创 2021-08-05 17:22:39 · 321 阅读 · 0 评论 -
排序算法之桶排序
桶排序一:什么是桶排序二:基于桶排序思想下的两种排序1、计数排序2、基数排序一:什么是桶排序桶排序是将待排序集合中处于同一个值域的元素存入同一个桶中,(当然这个桶的存储结构也是多样的,可以是数组、栈、队列啊等等)也就是根据元素值特性将集合拆分为多个区域,则拆分后形成的多个桶,从值域上看是处于有序状态的。对每个桶中元素进行排序,则所有桶中元素构成的集合是已排序的。那么从本质上来讲,桶排序和其它排序方法最大的不同之处在于:桶排序是不基于比较的排序下面举两个具体的实现来验证一下二:基于桶排序思想下的两原创 2021-08-04 23:05:44 · 645 阅读 · 0 评论 -
Comparator比较器介绍、优先级队列PriorityQueue
比较器一:比较器的概念二:Comparable与Compartor的区别一:比较器的概念比较器的实质就是重载比较运算符说到排序了,简单的说就是两个对象之间比较大小,那么在JAVA中提供了两种比较实现的方式,一种是比较死板的采用java.lang.Comparable接口去实现,一种是灵活的当我需要做排序的时候在去选择的java.util.Comparator接口完成。Comparator这个接口,位于位于java.util包下,排序是comparator能实现的功能之一,该接口代表一个比较器,比较器原创 2021-08-03 17:02:21 · 1891 阅读 · 0 评论 -
排序算法之堆排序
堆排序一:什么是堆1.1、堆的性质二:堆排序的实现2.1、基本思想:2.2、代码实现-Java一:什么是堆堆是一种数据结构,一种叫做完全二叉树的数据结构。1.1、堆的性质大根堆:每个节点的值都大于或者等于它的左右子节点的值。小根堆:每个节点的值都小于或者等于它的左右子节点的值。我们对上面的图中每个数都进行了标记,上面的结构映射成数组就变成了下面这个样子那么这种堆结构,我们实际上是可以使用数组来进行存储表示的。通过观察,我们可以发现如下规律:查找数组中某个数的父结点和左右孩子结点,已知索原创 2021-08-03 11:34:11 · 224 阅读 · 0 评论 -
依次输入表(30,15,28,20,24,10,68,35,50)中的元素,生成一棵平衡的二叉排序树。(LL型、RR型、LR型、RL型)
构造平衡的二叉排序树依次输入表(30,15,28,20,24,10,68,35,50)中的元素,生成一棵平衡的二叉排序树。请画出构造过程,并在其中注明每一次平衡化的类型(LL型、RR型、LR型、RL型)原创 2021-07-14 23:23:12 · 1245 阅读 · 0 评论 -
哈希表的查找(按照除留余数法设计一个哈希函数)
给定一组查找关键字(32,15,7,11,4,28,56,61,79),哈希表长为m=12,请按照除留余数法设计一个哈希函数,设每个记录的查找概率相等。(1)画出按照线性探测再散列处理冲突得到的哈希表(给出求解过程),并计算等概率情况下查找成功和查找失败时的平均查找长度各是多少。(2)画出按照链地址法处理冲突得到的哈希表,并计算等概率情况下查找成功和查找失败时的平均查找长度各是多少。==设计哈希函数为 ==H(key)= key % 11(1)按照线性探测再散列处理冲突查找成功时平均查找长度原创 2021-07-14 23:03:03 · 7816 阅读 · 2 评论 -
常用的内部排序算法C语言实现
常用的内部排序算法一、实验目的:1.掌握常见的内部排序算法的思想及其适用条件。2.掌握常见的内部排序算法的程序实现。二、实验内容及要求:1.任务:设计一个内部排序算法模拟系统,利用该系统实现常用的 7 种排序算法,并测试各种排序 算法的性能。2.内容:通过一个简单的菜单,分别实现下列排序要求,采用几组不同数据测试各排序算法的性能 (比较次数和移动次数)及稳定性。◆实现简单选择排序、直接插入排序和冒泡排序;◆实现折半插入排序;◆实现希尔排序算法;◆实现快速排序算法(递归和非递归);◆实现原创 2021-07-14 21:13:20 · 1444 阅读 · 0 评论 -
栈和队列的常见面试题-Java实现
栈和队列的常见面试题一:实现一个特殊的栈,在基本功能的基础上,再实现返回栈中最小元素的功能。popElem、pushElem、getMinElem操作的时间复杂度都是O(1)。 public static class MyStack{ private static Stack<Integer> stackData; private static Stack<Integer> stackMin; public MyStack原创 2021-07-14 20:56:05 · 199 阅读 · 0 评论 -
栈和队列的底层实现-Java描述
栈和队列的两种底层实现一:双向链表实现1.栈2.队列二:数组实现1.栈2.队列一:双向链表实现双向链表实现可以从头部进,头部出,以及尾部进,尾部出的结构 public static class Node<T> { public T value; public Node<T> last; public Node<T> next; public Node(T value) {原创 2021-07-14 11:26:04 · 1203 阅读 · 0 评论 -
数据结构之栈和队列-C语言描述
栈和队列一:栈1.顺序栈2.链栈二:队列1.顺序队列(循环队列)2.链队一:栈1.栈是限定仅在表尾进行插入或删除操作的线性表。因此对于栈来说,表尾端成为栈顶,表头端成为栈底具有先进后出的特点1.顺序栈顺序栈的存储结构定义typedef struct sqStack{ int *base; //栈底指针 int *top; //栈顶指针 int stackSize; //栈可用的最大容量}stack;入栈出栈操作#include <std原创 2021-07-01 11:45:30 · 236 阅读 · 0 评论 -
数据结构之线性表-C语言描述
线性表顺序存储结构和链式存储结构一:顺序表二:链表1.单链表2.循环链表3.双向链表顺序存储结构和链式存储结构线性表存储数据可细分为以下 2 种:1.将数据依次存储在连续的整块物理空间中,这种存储结构称为顺序存储结构(简称顺序表);2.数据分散的存储在物理空间中,通过一根线保存着它们之间的逻辑关系,这种存储结构称为链式存储结构(简称链表);也就是说,线性表存储结构可细分为顺序存储结构和链式存储结构。一:顺序表顺序表的存储结构定义#define Size 5typedef struct Ta原创 2021-06-30 10:56:37 · 277 阅读 · 0 评论 -
赫夫曼编码解码C语言实现
赫夫曼编码解码一、实验目的掌握赫夫曼树和赫夫曼编码的基本思想和算法的程序实现。二、 实验内容及要求任务描述实现文件中数据的加解密与压缩:将硬盘上的一个文本文件进行加密,比较加密文件和原始文件 的大小差别;对加密文件进行解密,比较原始文件和解码文件的内容是否一致。程序源代码:DS.h#include <stdio.h>#include <string.h>#include <stdlib.h>#include <ctype.h>HFTr原创 2021-06-14 00:33:41 · 1889 阅读 · 0 评论 -
一元多项式计算器C语言实现
一元多项式计算器一、实验目的1.掌握顺序表和单链表的存储特点及插入、删除等算法。2.灵活运用顺序表和单链表的相关算法实现一元多项式的计算。二、 实验内容及要求任务描述设有一元多项式Am(x)和Bn(X),编程实现多项式Am(x)和Bn(x)的加法、减法和乘法运算。其中多项 式描述为:Am(x)=A0+A1x1+A2x2+A3x3+….+Amxm;Bn(x)=B0+B1x1+B2x2+B3x3+….+Bnxn。程序源代码:DS.h#include <stdio.h>#inc原创 2021-06-09 10:39:22 · 3555 阅读 · 1 评论