数据结构
鸭绒
追求起点是大厂。
展开
-
数据结构:JS实现构建堆、堆排序
上一篇博客已经学习了堆以及堆排序的思想,不了解堆的可以先学习这篇博客。直接上JS实现堆以及堆排序:<!DOCTYPE html><html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>堆排序</ti原创 2020-11-14 20:01:26 · 266 阅读 · 0 评论 -
数据结构:堆的构建与排序思想(C语言)
1.什么是堆?定义:堆通常是可以看作一棵树的数组对象,堆是非线性数据结构,相当于一维数组。堆总是满足下列性质:堆中某个节点的值总是不大于或不小于其父节点的值;堆总是一棵完全二叉树。将根节点最大的堆叫做最大堆或大根堆,根节点最小的堆叫做最小堆或小根堆。下面我们将会学习: 建初堆:如何将一个无序序列建成一个堆? 调整堆:去掉堆顶元素,在堆顶元素改变之后,如何调整剩余元素成为一个新的堆?因为建初堆要用到调整堆的操作,所以下面先讨论调整堆的实现。2.调整堆先看一个例子,如图a是一个堆原创 2020-11-14 13:27:52 · 406 阅读 · 1 评论 -
数据结构:JS实现快速排序
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>快速排序</title></head><body> <script>原创 2020-10-27 20:14:34 · 268 阅读 · 0 评论 -
数据结构:JS实现选择排序、冒泡排序、插入排序
//思想:每次遍历找出值更小的下标值,一次遍历完之后,交换两者的值 function selectSort(array){ for(let i=0;i<array.length;i++){ let temp=i; for(let j=i+1;j<array.length;j++){ if(array[temp]>array[j]){...原创 2020-10-27 19:23:43 · 116 阅读 · 0 评论 -
数据结构:红黑树理论知识
数据结构:红黑树二. 认识红黑树三. 红黑树的变换四. 插入操作的情况分析五. 红黑树的案例转载 2020-10-25 15:50:22 · 75 阅读 · 0 评论 -
数据结构:JS实现二叉搜索树
数据结构:二叉搜索树前面, 我们学习了关于树的一些概念以及比较重要的二叉树的特性.现在, 我们为二叉树再增加一个限制, 那么就可以形成一个二叉搜索树.一. 二叉搜索树的概念我们先来简单理解一下什么是二叉搜索树.什么是二叉搜索树?二叉搜索树(BST,Binary Search Tree),也称二叉排序树或二叉查找树二叉搜索树是一颗二叉树, 可以为空;如果不为空,满足以下性质:非空左子树的所有键值小于其根结点的键值。非空右子树的所有键值大于其根结点的键值。左、右子树本身也都是转载 2020-10-25 15:39:07 · 229 阅读 · 0 评论 -
数据结构:JS实现哈希表
数据结构:哈希表实现前面, 我们使用了大量的篇幅来解析哈希表的理论知识.现在, 我们进入代码的实施阶段, 但是实施之前, 先来深入一个比较重要的话题: 哈希函数.一. 哈希函数讲了很久的哈希表理论知识, 你有没有发现在整个过程中, 一个非常重要的东西: 哈希函数呢?我们这里来探讨一下, 设计好的哈希函数应该具备哪些优点.快速的计算好的哈希函数应该尽可能让计算的过程变得简单, 应该可以快速计算出结果.哈希表的主要优点是它的速度, 所以在速度上不能满足, 那么就达不到设计的目的了.转载 2020-10-25 15:04:16 · 365 阅读 · 0 评论 -
数据结构:哈希表理论
哈希表理论哈希表是一种非常重要的数据结构, 很多学习编程的人一直搞不懂哈希表到底是如何实现的.在这一章节中, 我们就一点点来实现一个自己的哈希表. 通过实现来理解哈希表背后的原理和它的优势.一. 认识哈希表我们还像其他数据结构一样, 先来简单的认识一下哈希表.哈希表介绍哈希表是一种非常重要的数据结构, 几乎所有的编程语言都有直接或者间接的应用这种数据结构.哈希表通常是基于数组进行实现的, 但是相对于数组, 它也很多的优势:它可以提供非常快速的插入-删除-查找操作无论多少数据,转载 2020-10-25 14:41:21 · 1260 阅读 · 0 评论 -
数据结构:JS封装单、双向链表
在这里我就不再介绍什么是单、双链表了,如果有不清楚定义的可以先了解再来学封装。1.单链表结构图:先来看看链表常见的操作:append(element):向列表尾部添加一个新的项insert(position, element):向列表的特定位置插入一个新的项。remove(element):从列表中移除一项。indexOf(element):返回元素在列表中的索引。如果列表中没有该元素则返回-1。removeAt(position):从列表的特定位置移除一项。.原创 2020-10-23 17:18:25 · 218 阅读 · 0 评论 -
数据结构:JS封装栈、队列
1.栈栈是个非常常见的数据结构。它的特点就是后进先出(LIFO)。生活中常见的场景:家里摆放的碗,摆的最顶端的碗是最后放进去的,但是用餐时,往往是是最顶端的碗先被拿来使用。比如,我们乘坐的地铁,当地铁到了终点站,车尾是最后进来的,等到发车时,由于是逆方向行驶,则是车尾这边先出去。在我们学习的程序中,也有个经典例子:function A(){ B();}function B(){ C();}function C(){ D();}function D(){}//即执行A函原创 2020-10-23 11:53:22 · 163 阅读 · 0 评论 -
数据结构:神秘国度的爱情故事
[问题描述] 某个太空神秘国度中有很多美丽的小村,从太空中可以想见,小村间有路相连,更精确一点说,任意两村之间有且仅有一条路径。小村 A 中有位年轻人爱上了自己村里的美丽姑娘。每天早晨,姑娘都会去小村 B 里的面包房工作,傍晚 6 点回到家。年轻人终于决定要向姑娘表白,他打算在小村 C 等着姑娘路过的时候把爱慕说出来。问题是,他不能确定小村 C 是否在小村 B 到小村 A 之间的路径上。你...原创 2019-12-18 22:04:15 · 707 阅读 · 0 评论 -
数据结构:c++算术表达式求值
算术表达式求值[问题描述] 一个算术表达式是由操作数(operand)、运算符(operator)和界限符(delimiter)组成的。假设操作数是正实数,运算符只含加减乘除等四种运算符,界限符有左右括号和表达式起始、结束符“#”,如:#(7+15)*(23-28/4)#。引入表达式起始、结束符是为了方便。编程利用“运算符优先法”求算术表达式的值。解题思路:1.首先建立两个栈用来分别存储操...原创 2019-12-18 13:00:57 · 8166 阅读 · 10 评论