![](https://img-blog.csdnimg.cn/20210402135640922.jpg?x-oss-process=image/resize,m_fixed,h_224,w_224)
数据结构和算法
数据结构和算法
sun_wei_tao
打杂工程师
展开
-
广度优先搜索和深度优先搜索的实现
前言广度优先搜索和深度优先搜索都是对图进行搜索的算法广度优先搜索广度优先搜索广泛搜索子节点,将其子节点放进候选节点中;操做候选节点时是按顺序取出候选节点,因此使用队列存储候选节点。关于队列的实现可参考队列的实现声明广度优先搜索函数,参数为要搜索的树形图和要查找的节点实例化队列,声明目标节点的深度,初始化0遍历队列获取队列第一个元素,判断是否和目标节点相等,相等返回深度判断当前节点是否有子节点,并将子节点添加到队列中删除当前队列第一个元素function breadthFirst原创 2021-04-08 14:12:54 · 526 阅读 · 1 评论 -
实现图
前言图结构的特点一组顶点用V(vertex)表示顶点的集合一组边用E(edge)表示边的集合边是顶点和顶点之间的连线边可以有向,可以无向图的概念顶点表示图中的一个节点边表示顶点和顶点之间的连线相邻顶点,一条边连接在一起的顶点称为相邻顶点度,相邻顶点的数量路径,顶点v1,v2,…,vn的一个连续序列简单路径,不包含重复的顶点回路,第一个顶点和第二个顶点相同相同的路径无向图,所有的边都没有方向有向图,边有方向无权图,边不携带权重带权图,边有一定的权重图的表示原创 2021-04-08 09:25:47 · 114 阅读 · 1 评论 -
红黑树
前言红黑树顾名思义数中的节点只能是黑色或红色,是自平衡二叉树实现思路红黑树的规则节点只能是红色或黑色根节点是黑色叶子节点都是黑色的NIL空节点每个红色节点的两个子节点都是黑色(每个叶子节点到根节点的路径不能有两个连续的红色节点)任意节点到叶子节点的路径包含黑色节点的数量相同插入节点的情况声明N代表插入节点默认红色,P代表父节点,U代表父节点的兄弟节点,G代表祖节点根节点为空父节点是黑色父节点是红色,叔节点是红色,祖节点是黑色父节点是红色,叔节点是黑色,祖节点是黑色,插入节原创 2021-04-07 14:47:31 · 110 阅读 · 0 评论 -
实现二叉搜索树
前言二叉搜索树是二叉树的一种每个节点的左子节点一定比自身小每个节点的右子节点一定比自身大实现思路和代码实现二叉搜索树类定义内部节点类 包含以下属性key节点值left指向左子节点right指向右子节点定义root属性表示根节点function BinarySearchTree() { this.root = null function Node(key) { this.key = key this.left = null this.right原创 2021-04-06 23:24:01 · 155 阅读 · 2 评论 -
实现HashMap
前言哈希表存储元素时将key进行hash计算,hash值转成索引后再存储元素使用链地址法解决哈希冲突问题,如图所示哈希表每一项中再存储一个数组或链表用于存储hash值相同的元素随着元素的插入和删除,需要对哈希表进行扩容或缩容操作实现思路和代码哈希表function HashTable() { //容器 this.storage = [] //大小 this.count = 0 //容量 this.limit = 7}哈希函数计算hash值hashFun原创 2021-04-06 09:23:15 · 102 阅读 · 0 评论 -
集合的实现
前言集合是没有重复值且有顺序的数据结构实现思路和代码集合类function Set() { this.items = {}}基础集合具备以下方法判断元素是否在集合中has(value) { //使用对象原型方法判断元素是否在集合中 return this.items.hasOwnProperty(value)}集合中添加元素add(value) { //判断集合中是否存在要添加的元素 if(this.has(value)) { return f原创 2021-04-05 20:11:11 · 301 阅读 · 0 评论 -
链表和双向链表的实现
前言链表中的数据通过指针连接,添加、插入或删除节点只需要修改指针指向即可![在这里插入图片描述](https://img-blog.csdnimg.cn/20210403233053845.png)原创 2021-04-04 00:51:34 · 121 阅读 · 0 评论 -
实现优先级队列
实现思路优先级队列和普通队列的区别在于添加元素到队列时会根据传入的数字数字越小优先级越高实现代码/** * 优先级队列 */function PriorityQueue() { //能创建一个具有优先级的数据的类 function QueueElement(elem, priority) { this.elem = elem this.priority = priority } //模拟队列 this.items = [] //插入方法 P原创 2021-04-02 23:49:07 · 133 阅读 · 0 评论 -
基于数组实现队列 根据队列特性实现击鼓传花
实现思路队列的核心思想是先进先出(FIFO),队列支持从前端(front)移除数据,从后端(rear)插入数据实现一个队列需要具备以下方法将元素加入到队列删除队列前端元素查看队列前端元素查看队列是否为空查看队列大小查看队列内所有元素清空队列实现代码/** * 基于数组实现队列 */function Queue() { this.items = [] //将元素加入到队列 Queue.prototype.enqueue = function(elem) {原创 2021-04-02 16:03:09 · 116 阅读 · 0 评论 -
数组实现栈结构 利用栈结构封装十进制转二进制
实现思路栈的核心思想为后进先出(LIFO)实现一个栈需要具备以下功能压栈:添加一个元素到栈顶出栈:移除栈顶的元素并返回获取栈顶元素并返回判断栈是否为空输出栈内的数据清空栈获取栈的大小实现代码/** * 数组实现栈结构 */function Stack() { //数组模拟栈 this.items = [] //压栈 Stack.prototype.push = function(elem) { this.items.push(elem) } /原创 2021-04-02 14:26:23 · 885 阅读 · 2 评论