{"id":24493081,"url":"https://github.com/open-node/jstructures","last_synced_at":"2025-04-14T01:40:47.422Z","repository":{"id":57286486,"uuid":"158678014","full_name":"open-node/jstructures","owner":"open-node","description":"JavaScript 版本的数据结构，提供常用的数据结构封装，基于清华大学邓俊辉老师的数据结构课程","archived":false,"fork":false,"pushed_at":"2019-03-09T12:46:58.000Z","size":1501,"stargazers_count":8,"open_issues_count":0,"forks_count":5,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-03-27T15:52:16.377Z","etag":null,"topics":["algorithm","data-structures","heap","javascript","queue","stack","tree-structure"],"latest_commit_sha":null,"homepage":"http://jstructures.xiongfei.me/","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/open-node.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2018-11-22T09:56:17.000Z","updated_at":"2023-11-27T07:09:37.000Z","dependencies_parsed_at":"2022-09-20T01:11:34.203Z","dependency_job_id":null,"html_url":"https://github.com/open-node/jstructures","commit_stats":null,"previous_names":["open-node/javascript-data-structures"],"tags_count":7,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/open-node%2Fjstructures","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/open-node%2Fjstructures/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/open-node%2Fjstructures/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/open-node%2Fjstructures/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/open-node","download_url":"https://codeload.github.com/open-node/jstructures/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248809040,"owners_count":21164893,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["algorithm","data-structures","heap","javascript","queue","stack","tree-structure"],"created_at":"2025-01-21T19:19:03.427Z","updated_at":"2025-04-14T01:40:47.400Z","avatar_url":"https://github.com/open-node.png","language":"JavaScript","readme":"# JStructure\nJavaScript 版本的数据结构，提供常用的数据结构封装，基于清华大学邓俊辉老师的数据结构课程\n\n[![Build status](https://travis-ci.com/open-node/jstructures.svg?branch=master)](https://travis-ci.org/open-node/jstructures)\n[![codecov](https://codecov.io/gh/open-node/jstructures/branch/master/graph/badge.svg)](https://codecov.io/gh/open-node/jstructures)\n\n# 进度\n* [x] List (linked-list)\n* [x] Vector\n* [x] Stack\n* [x] Queue\n* [x] SegmentTree\n* [x] UnionFind\n* [x] BinTree\n  * [x] BST (BinanySearchTree)\n  * [ ] BTree\n* [x] Trie\n* [ ] Graph\n* [x] Heap\n  * [ ] LeftHeap\n* [ ] Priority Queue\n\n\n\n\u003c!-- Generated by documentation.js. Update this documentation by updating the source code. --\u003e\n\n### Table of Contents\n\n\n\n\u003c!-- Generated by documentation.js. Update this documentation by updating the source code. --\u003e\n\n### Table of Contents\n\n-   [AVL][1]\n    -   [insert][2]\n        -   [Parameters][3]\n    -   [remove][4]\n        -   [Parameters][5]\n    -   [balanced][6]\n        -   [Parameters][7]\n    -   [AVLBalanced][8]\n        -   [Parameters][9]\n    -   [balFac][10]\n        -   [Parameters][11]\n    -   [height][12]\n        -   [Parameters][13]\n-   [BST][14]\n    -   [search][15]\n        -   [Parameters][16]\n    -   [insert][17]\n        -   [Parameters][18]\n    -   [remove][19]\n        -   [Parameters][20]\n    -   [removeAt][21]\n        -   [Parameters][22]\n    -   [searchIn][23]\n        -   [Parameters][24]\n-   [BinNode][25]\n    -   [Parameters][26]\n    -   [data][27]\n    -   [parent][28]\n    -   [lc][29]\n    -   [rc][30]\n    -   [height][31]\n    -   [size][32]\n    -   [isRoot][33]\n    -   [isLChild][34]\n    -   [isRChild][35]\n    -   [hasParent][36]\n    -   [hasLChild][37]\n    -   [hasRChild][38]\n    -   [hasChild][39]\n    -   [hasBothChild][40]\n    -   [isLeaf][41]\n    -   [sibling][42]\n    -   [uncle][43]\n    -   [fromParentTo][44]\n    -   [pred][45]\n    -   [succ][46]\n    -   [insertAsLC][47]\n        -   [Parameters][48]\n    -   [insertAsRC][49]\n        -   [Parameters][50]\n    -   [travLevel][51]\n        -   [Parameters][52]\n    -   [travPre][53]\n        -   [Parameters][54]\n    -   [travIn][55]\n        -   [Parameters][56]\n    -   [travPost][57]\n        -   [Parameters][58]\n    -   [swap][59]\n        -   [Parameters][60]\n-   [BinTree][61]\n    -   [size][62]\n    -   [size][63]\n        -   [Parameters][64]\n    -   [empty][65]\n    -   [root][66]\n    -   [root][67]\n        -   [Parameters][68]\n    -   [updateHeightAbove][69]\n        -   [Parameters][70]\n    -   [insertAsRoot][71]\n        -   [Parameters][72]\n    -   [insertAsLC][73]\n        -   [Parameters][74]\n    -   [insertAsRC][75]\n        -   [Parameters][76]\n    -   [attachAsLC][77]\n        -   [Parameters][78]\n    -   [attachAsRC][79]\n        -   [Parameters][80]\n    -   [remove][81]\n        -   [Parameters][82]\n    -   [secede][83]\n        -   [Parameters][84]\n    -   [travLevel][85]\n        -   [Parameters][86]\n    -   [travPre][87]\n        -   [Parameters][88]\n    -   [travIn][89]\n        -   [Parameters][90]\n    -   [travPost][91]\n        -   [Parameters][92]\n-   [Heap][93]\n    -   [Parameters][94]\n    -   [size][95]\n    -   [percolateUp][96]\n        -   [Parameters][97]\n    -   [percolateDown][98]\n        -   [Parameters][99]\n    -   [insert][100]\n        -   [Parameters][101]\n    -   [getMax][102]\n    -   [delMax][103]\n        -   [Parameters][104]\n-   [properParent][105]\n    -   [Parameters][106]\n-   [ListNode][107]\n    -   [Parameters][108]\n    -   [insertAsSucc][109]\n        -   [Parameters][110]\n    -   [insertAsPred][111]\n        -   [Parameters][112]\n-   [List][113]\n    -   [Parameters][114]\n    -   [size][115]\n    -   [first][116]\n    -   [last][117]\n    -   [insertAsFirst][118]\n        -   [Parameters][119]\n    -   [insertAsLast][120]\n        -   [Parameters][121]\n    -   [insertA][122]\n        -   [Parameters][123]\n    -   [insertB][124]\n        -   [Parameters][125]\n    -   [remove][126]\n        -   [Parameters][127]\n    -   [disordered][128]\n    -   [findElem][129]\n        -   [Parameters][130]\n    -   [search][131]\n        -   [Parameters][132]\n    -   [deduplicate][133]\n    -   [uniquify][134]\n    -   [traverse][135]\n        -   [Parameters][136]\n    -   [valid][137]\n        -   [Parameters][138]\n    -   [selectMax][139]\n        -   [Parameters][140]\n    -   [insertionSort][141]\n        -   [Parameters][142]\n    -   [selectionSort][143]\n        -   [Parameters][144]\n    -   [merge][145]\n        -   [Parameters][146]\n    -   [mergeSort][147]\n        -   [Parameters][148]\n-   [Queue][149]\n    -   [enqueue][150]\n        -   [Parameters][151]\n    -   [dequeue][152]\n    -   [front][153]\n    -   [empty][154]\n    -   [size][155]\n-   [SegmentTree][156]\n    -   [Parameters][157]\n    -   [size][158]\n    -   [leftChild][159]\n        -   [Parameters][160]\n    -   [rightChild][161]\n        -   [Parameters][162]\n    -   [build][163]\n        -   [Parameters][164]\n    -   [query][165]\n        -   [Parameters][166]\n    -   [update][167]\n        -   [Parameters][168]\n-   [Stack][169]\n    -   [push][170]\n        -   [Parameters][171]\n    -   [pop][172]\n    -   [top][173]\n    -   [empty][174]\n    -   [size][175]\n-   [Trie][176]\n    -   [size][177]\n    -   [root][178]\n    -   [insert][179]\n        -   [Parameters][180]\n    -   [find][181]\n        -   [Parameters][182]\n-   [UnionFind][183]\n    -   [Parameters][184]\n    -   [find][185]\n        -   [Parameters][186]\n    -   [union][187]\n        -   [Parameters][188]\n    -   [isConnected][189]\n        -   [Parameters][190]\n    -   [toString][191]\n-   [Vector][192]\n    -   [Parameters][193]\n    -   [size][194]\n    -   [insert][195]\n        -   [Parameters][196]\n    -   [removeRange][197]\n        -   [Parameters][198]\n    -   [remove][199]\n        -   [Parameters][200]\n    -   [disordered][201]\n    -   [findElem][202]\n        -   [Parameters][203]\n    -   [search][204]\n        -   [Parameters][205]\n    -   [deduplicate][206]\n    -   [uniquify][207]\n    -   [traverse][208]\n        -   [Parameters][209]\n    -   [binSearch][210]\n        -   [Parameters][211]\n    -   [bubbleSort][212]\n        -   [Parameters][213]\n    -   [merge][214]\n        -   [Parameters][215]\n    -   [mergeSort][216]\n        -   [Parameters][217]\n\n## AVL\n\n**Extends BST**\n\nAVL 类(AVL 树, 继承自 BST)\n\nReturns **[AVL][218]** Instance\n\n### insert\n\n插入元素\n\n#### Parameters\n\n-   `e` **Anyone** 要插入的数据元素\n\nReturns **[BinNode][219]** \n\n### remove\n\n删除元素, 注意是删除节点，非节点为根的子树\n\n#### Parameters\n\n-   `e` **Anyone** 要插入的数据元素\n\nReturns **[Boolean][220]** 是否成功删除\n\n### balanced\n\n判断某个节点是否理想平衡即：左右高度相等\n\n#### Parameters\n\n-   `x`  \n-   `要判断的节点` **[BinNode][219]** \n\nReturns **[Boolean][220]** \n\n### AVLBalanced\n\n判断某个节点是否AVL平衡即：-2\u0026lt;左高度-右高度\u0026lt;2\n\n#### Parameters\n\n-   `x`  \n-   `要判断的节点` **[BinNode][219]** \n\nReturns **[Boolean][220]** \n\n### balFac\n\n获取节点的平衡因子 x.lc.height - x.rc.height;\n\n#### Parameters\n\n-   `x`  \n-   `要判断的节点` **[BinNode][219]** \n\nReturns **[number][221]** 左子树高度和右子树高度的差值\n\n### height\n\n获取节点的高度\n\n#### Parameters\n\n-   `x`  \n-   `要判断的节点` **[BinNode][219]** \n\nReturns **[number][221]** 节点高度，空树高 -1， 叶子高 0\n\n## BST\n\n**Extends BinTree**\n\nBST 类(二叉搜索树类, 继承自 BinTree)\n\nReturns **[BST][222]** Instance\n\n### search\n\n查找元素 e 所在的节点\n\n#### Parameters\n\n-   `e` **Anyone** 要搜索的元素\n\nReturns **\\[[BinNode][219]]** 返回两项，第一项是搜索命中的节点，第二项是命中节点的父节点\n\n### insert\n\n插入元素\n\n#### Parameters\n\n-   `e` **Anyone** 要插入的数据元素\n\nReturns **[BinNode][219]** \n\n### remove\n\n删除元素, 注意是删除节点，非节点为根的子树\n\n#### Parameters\n\n-   `e` **Anyone** 要插入的数据元素\n\nReturns **[Boolean][220]** 是否成功删除\n\n### removeAt\n\n删除某个节点\n\n#### Parameters\n\n-   `x` **[BinNode][219]** 要删除的节点\n\nReturns **[BinNode][219]** 返回接替者\n\n### searchIn\n\n以 v 为根节点查找元素 e 所在的节点\n\n#### Parameters\n\n-   `v` **[BinNode][219]** 要搜索的树的根节点\n-   `e` **Anyone** 要搜索的元素\n-   `parent`  \n-   `p` **[BinNode][219]** 当前搜索节点的父节点\n\nReturns **\\[[BinNode][219]]** 返回两项，第一项是搜索命中的节点，第二项是命中节点的父节点\n\n## BinNode\n\nBinNode 类(二叉树节点类)\n\n### Parameters\n\n-   `e` **Anyone**  (optional, default `null`)\n-   `parent` **[BinNode][219]** 父节点 (optional, default `null`)\n-   `lc` **[BinNode][219]** 左子节点 (optional, default `null`)\n-   `rc` **[BinNode][219]** 右子节点 (optional, default `null`)\n\nReturns **[BinNode][219]** Instance\n\n### data\n\n节点存储数据\n\n### parent\n\n父节点\n\n### lc\n\n左子节点\n\n### rc\n\n右子节点\n\n### height\n\n以该节点为根的树高度\n\n### size\n\n节点为根的子树规模\n\nReturns **[Boolean][220]** \n\n### isRoot\n\n判断是否是根节点\n\nReturns **[Boolean][220]** \n\n### isLChild\n\n判断是否是左子节点\n\nReturns **[Boolean][220]** \n\n### isRChild\n\n判断是否是右子节点\n\nReturns **[Boolean][220]** \n\n### hasParent\n\n判断是否有父节点\n\nReturns **[Boolean][220]** \n\n### hasLChild\n\n判断是有左子节点\n\nReturns **[Boolean][220]** \n\n### hasRChild\n\n判断是有左子节点\n\nReturns **[Boolean][220]** \n\n### hasChild\n\n判断是有子节点\n\nReturns **[Boolean][220]** \n\n### hasBothChild\n\n判断是有完整子节点 (即左右子节点都有)\n\nReturns **[Boolean][220]** \n\n### isLeaf\n\n判断是否是叶子节点(没有子节点)\n\nReturns **[Boolean][220]** \n\n### sibling\n\n兄弟节点\n\nReturns **[BinNode][219]** \n\n### uncle\n\n叔叔节点(即父节点的兄弟节点)\n\nReturns **[BinNode][219]** \n\n### fromParentTo\n\n获取来自父节点的引用\n\nReturns **[Array][223]** [object, key]\n\n### pred\n\n获取中序遍历下的直接前驱\n\nReturns **[BinNode][219]** 返回前驱节点，不存在则返回 null\n\n### succ\n\n获取中序遍历下的直接后继\n\nReturns **[BinNode][219]** 返回后继节点，不存在则返回 null\n\n### insertAsLC\n\n将元素作为左子节点插入\n\n#### Parameters\n\n-   `e` **Anyone** \n\nReturns **[BinNode][219]** 返回插入额节点\n\n### insertAsRC\n\n将元素作为右子节点插入\n\n#### Parameters\n\n-   `e` **Anyone** \n\nReturns **[BinNode][219]** 返回插入额节点\n\n### travLevel\n\n当前节点作为根节点的子树层次遍历 BFS\n\n#### Parameters\n\n-   `p`  \n-   `visit`  \n-   `访问函数` **[function][224]** \n\nReturns **void** \n\n### travPre\n\n当前节点作为根节点的子树前序遍历 DFS\n\n#### Parameters\n\n-   `p` **[BinNode][219]** 遍历的节点\n-   `visit`  \n-   `访问函数` **[function][224]** \n\nReturns **void** \n\n### travIn\n\n当前节点作为根节点的子树中序遍历 DFS\n\n#### Parameters\n\n-   `p` **[BinNode][219]** 遍历的节点\n-   `visit`  \n-   `访问函数` **[function][224]** \n\nReturns **void** \n\n### travPost\n\n当前节点作为根节点的子树后序遍历 DFS\n\n#### Parameters\n\n-   `p` **[BinNode][219]** 遍历的节点\n-   `visit`  \n-   `访问函数` **[function][224]** \n\nReturns **void** \n\n### swap\n\n交换量几个节点的数据\n\n#### Parameters\n\n-   `node1` **[BinNode][219]** 要交换的节点1\n-   `node2` **[BinNode][219]** 要交换的节点2\n\nReturns **void** \n\n## BinTree\n\nBinTree 类(二叉树类)\n\nReturns **[BinTree][225]** Instance\n\n### size\n\n树的规模\n\nReturns **[number][221]** \n\n### size\n\n更新树的规模\n\n#### Parameters\n\n-   `num`  \n\nReturns **[number][221]** \n\n### empty\n\n树是否为空\n\nReturns **[Boolean][220]** \n\n### root\n\n树根节点\n\nReturns **[BinNode][219]** \n\n### root\n\n重置根节点\n\n#### Parameters\n\n-   `_root`  \n\nReturns **[BinNode][219]** \n\n### updateHeightAbove\n\n更新节点以及祖先节点的高度\n\n#### Parameters\n\n-   `p` **[BinNode][219]** 要更新的节点\n\nReturns **[number][221]** 返回更新后的高度\n\n### insertAsRoot\n\n作为树根节点插入\n\n#### Parameters\n\n-   `e` **Anyone** 要插入的数据元素\n\nReturns **[BinNode][219]** \n\n### insertAsLC\n\n作为节点的左孩子插入\n\n#### Parameters\n\n-   `p` **[BinNode][219]** 要插入的位置\n-   `e` **Anyone** 要插入的数据元素\n\nReturns **[BinNode][219]** \n\n### insertAsRC\n\n作为节点的右孩子插入\n\n#### Parameters\n\n-   `p` **[BinNode][219]** 要插入的位置\n-   `e` **Anyone** 要插入的数据元素\n\nReturns **[BinNode][219]** \n\n### attachAsLC\n\n作为节点的左孩子接入子树\n\n#### Parameters\n\n-   `p` **[BinNode][219]** 要插入的位置\n-   `s` **[BinTree][225]** 要接入的数\n\nReturns **[BinNode][219]** \n\n### attachAsRC\n\n作为节点的右孩子接入子树\n\n#### Parameters\n\n-   `p` **[BinNode][219]** 要插入的位置\n-   `s` **[BinTree][225]** 要接入的数\n\nReturns **[BinNode][219]** \n\n### remove\n\n删除某个节点作为根的子树\n\n#### Parameters\n\n-   `p` **[BinNode][219]** 要删除的根节点\n\nReturns **[number][221]** 返回删除节点的总个数\n\n### secede\n\n分离某个节点作为根的子树\n\n#### Parameters\n\n-   `p` **[BinNode][219]** 要删除的根节点\n\nReturns **[BinTree][225]** 返回分离出来的子树\n\n### travLevel\n\n树的层次遍历\n\n#### Parameters\n\n-   `visit`  \n-   `访问函数` **[function][224]** \n\nReturns **void** \n\n### travPre\n\n树的前序遍历\n\n#### Parameters\n\n-   `visit`  \n-   `访问函数` **[function][224]** \n\nReturns **void** \n\n### travIn\n\n树的中序遍历\n\n#### Parameters\n\n-   `visit`  \n-   `访问函数` **[function][224]** \n\nReturns **void** \n\n### travPost\n\n树的后序遍历\n\n#### Parameters\n\n-   `visit`  \n-   `访问函数` **[function][224]** \n\nReturns **void** \n\n## Heap\n\nHeap 堆\n\n### Parameters\n\n-   `elems`   (optional, default `[]`)\n-   `length`   (optional, default `0`)\n\nReturns **[Heap][226]** Instance\n\n### size\n\n获取堆的大小\n\nReturns **[number][221]** \n\n### percolateUp\n\n元素上滤操作\n\n#### Parameters\n\n-   `i` **[Number][221]** 上滤的元素索引\n\nReturns **[Number][221]** 上滤的终止位置\n\n### percolateDown\n\n元素下滤操作\n\n#### Parameters\n\n-   `i` **[Number][221]** 下滤的元素索引\n\nReturns **[Number][221]** 下滤的终止位置\n\n### insert\n\ne 元素插入\n\n#### Parameters\n\n-   `e` **Anyone** \n\nReturns **void** \n\n### getMax\n\n返回堆的最大元素\n\nReturns **Anyone** \n\n### delMax\n\n删除堆的最大元素\n\n#### Parameters\n\n-   `e` **Anyone** \n\nReturns **void** \n\n## properParent\n\n得到父子三者（最多三个) 中的最大值\n\n### Parameters\n\n-   `n`  \n-   `i`  \n\n## ListNode\n\nListNode 类\n\n### Parameters\n\n-   `e` **Anyone?** 初始数组\n\nReturns **[ListNode][227]** Instance\n\n### insertAsSucc\n\n将 元素 e 作为当前节点的直接后继插入\n\n#### Parameters\n\n-   `e` **Anyone** \n\nReturns **[ListNode][227]** \n\n### insertAsPred\n\n将 元素 e 作为当前节点的直接前驱插入\n\n#### Parameters\n\n-   `e` **Anyone** \n\nReturns **[ListNode][227]** \n\n## List\n\nLinked-list 类\n\n### Parameters\n\n-   `_elem` **[Array][223]** 初始数组\n\nReturns **[List][228]** Instance\n\n### size\n\n获取列表长度/大小\n\nReturns **[number][221]** \n\n### first\n\n获取列表首节点\n\nReturns **[ListNode][227]** \n\n### last\n\n获取列表末节点\n\nReturns **[ListNode][227]** \n\n### insertAsFirst\n\n将 e 作为首节点插入列表\n\n#### Parameters\n\n-   `e` **Anyone** \n\nReturns **[ListNode][227]** \n\n### insertAsLast\n\n将 e 作为末节点插入列表\n\n#### Parameters\n\n-   `e` **Anyone** \n\nReturns **[ListNode][227]** \n\n### insertA\n\ne 作为节点 p 的直接后继插入\n\n#### Parameters\n\n-   `p`  \n-   `e` **Anyone** \n\nReturns **[number][221]** \n\n### insertB\n\ne 作为节点 p 的直接前驱插入\n\n#### Parameters\n\n-   `p`  \n-   `e` **Anyone** \n\nReturns **[number][221]** \n\n### remove\n\n删除指定节点 p\n\n#### Parameters\n\n-   `p` **[number][221]** 要删除元素\n\nReturns **Anyone** e 删除的元素\n\n### disordered\n\n返回列表中相邻元素逆序对总数, 当返回为0则代表列表有序\n\nReturns **[Number][221]** \n\n### findElem\n\n从节点p往前查找目标元素 e 所在最后节点, 最多查询 n 个\n\n#### Parameters\n\n-   `e` **Anyone** 要搜索的元素\n-   `n` **[number][221]** 最大搜索次数 (optional, default `this[size]`)\n-   `p` **[ListNode][227]** 从p节点往前查找, 默认为 tailer，查找全部 (optional, default `this[tailer]`)\n\nReturns **[ListNode][227]** 等于 e 的元素最后的节点\n\n### search\n\n从节点p的n的真前驱中查找不大于 e 的最后者\n\n#### Parameters\n\n-   `e` **Anyone** 要搜索的元素\n-   `n` **[number][221]** 最大搜索次数 (optional, default `this[size]`)\n-   `p` **[ListNode][227]** 从p节点往前查找, 默认为 tailer，查找全部 (optional, default `this[tailer]`)\n\nReturns **[ListNode][227]** 等于 e 的元素最后的节点\n\n### deduplicate\n\n剔除重复元素，保证每个元素都是唯一的\n\nReturns **[number][221]** 被删除的元素个数\n\n### uniquify\n\n有序列表剔除重复元素，保证每个元素都是唯一的\n\nReturns **[number][221]** 被删除的元素个数\n\n### traverse\n\n向量的遍历\n\n#### Parameters\n\n-   `visit` **[function][224]** 访问函数\n\nReturns **any** void\n\n### valid\n\n判断节点是否合法，存在，且不是首尾哨兵\n\n#### Parameters\n\n-   `p` **[ListNode][227]** \n\nReturns **[boolean][220]** \n\n### selectMax\n\n从起始位置 p 的n个元素中找到最大者, 相同大小后者优先\n\n#### Parameters\n\n-   `p` **[ListNode][227]** 排序起始节点 (optional, default `this[header].succ`)\n-   `n` **[number][221]**  (optional, default `this[size]`)\n\nReturns **[ListNode][227]** \n\n### insertionSort\n\n列表的插入排序, 对起始位置为 p 的 n 的元素进行排序\n\n#### Parameters\n\n-   `p` **[ListNode][227]** 排序起始节点 (optional, default `this[header].succ`)\n-   `n` **[number][221]**  (optional, default `this[size]`)\n\nReturns **[ListNode][227]** 排序后的起始节点\n\n### selectionSort\n\n列表的选择排序, 对起始位置为 p 的 n 的元素进行排序\n\n#### Parameters\n\n-   `p` **[ListNode][227]** 排序起始节点 (optional, default `this[header].succ`)\n-   `n` **[number][221]**  (optional, default `this[size]`)\n\nReturns **[ListNode][227]** 排序后的起始节点\n\n### merge\n\n列表的归并排序之归并, 对起始位置为 p 的 n 的元素进行排序\n\n#### Parameters\n\n-   `p` **[ListNode][227]** 合并起始节点\n-   `n` **[number][221]** \n-   `he` **[List][228]** 要合并的另外一个列表\n-   `q` **[ListNode][227]** 合并的另外一个列表起始节点\n-   `m` **[number][221]** 要合并的另外一个列表的节点数\n\nReturns **[ListNode][227]** 归并后的起始节点\n\n### mergeSort\n\n列表的归并排序, 对起始位置为 p 的 n 的元素进行排序\n\n#### Parameters\n\n-   `p` **[ListNode][227]** 排序起始节点 (optional, default `this[header].succ`)\n-   `n` **[number][221]**  (optional, default `this[size]`)\n\nReturns **[ListNode][227]** 排序后的起始节点\n\n## Queue\n\nQueue 类\n\nReturns **[Queue][229]** Instance\n\n### enqueue\n\ne 加入队列尾部(排队)\n\n#### Parameters\n\n-   `e` **Anyone** \n\nReturns **void** \n\n### dequeue\n\n将队首出队\n\nReturns **Anyone** e 之前压入的元素\n\n### front\n\n指向队首元素\n\nReturns **Anyone** e 之前压入的元素\n\n### empty\n\n判断队列是否为空\n\nReturns **[Boolean][220]** \n\n### size\n\n当前队列列长度(规模)\n\nReturns **[number][221]** \n\n## SegmentTree\n\nSegment-tree 线段树(区间树)类\n\n### Parameters\n\n-   `data`  \n-   `mergeFn`  \n-   `_elem` **[Array][223]** 初始数组\n\nReturns **[List][228]** Instance\n\n### size\n\n获取数据长度/大小\n\nReturns **[number][221]** \n\n### leftChild\n\n左节点的索引\n\n#### Parameters\n\n-   `index`  \n\nReturns **[number][221]** \n\n### rightChild\n\n右节点的索引\n\n#### Parameters\n\n-   `index`  \n\nReturns **[number][221]** \n\n### build\n\n构建线段树\n\n#### Parameters\n\n-   `index`  \n-   `left`  \n-   `right`  \n\nReturns **void** \n\n### query\n\n查询线段树的某一区间\n\n#### Parameters\n\n-   `qL` **[Number][221]** 查询的区间开始值\n-   `qR` **[Number][221]** 查询的区间结束值\n\nReturns **Anyone** \n\n### update\n\n更新某个值\n\n#### Parameters\n\n-   `index` **[Number][221]** 原数组的索引\n-   `val` **Anyone** 修改后的值\n\nReturns **void** \n\n## Stack\n\nStack 类\n\nReturns **[Stack][230]** Instance\n\n### push\n\ne 作为压入栈顶\n\n#### Parameters\n\n-   `e` **Anyone** \n\nReturns **void** \n\n### pop\n\n将栈顶出栈\n\nReturns **Anyone** e 之前压入的元素\n\n### top\n\n指向栈顶元素，并不出栈\n\nReturns **Anyone** e 之前压入的元素\n\n### empty\n\n判断栈是否为空\n\nReturns **[Boolean][220]** \n\n### size\n\n当前栈高度(规模)\n\nReturns **[Number][221]** \n\n## Trie\n\nReturns **[Trie][231]** Instance\n\n### size\n\n获取字典树的大小, 包含单词的数量\n\nReturns **[number][221]** \n\n### root\n\n获取字典树的跟节点\n\nReturns **[number][221]** \n\n### insert\n\n插入 word\n\n#### Parameters\n\n-   `word` **[String][232]** 要插入的单词\n\nReturns **void** \n\n### find\n\n查找 word\n\n#### Parameters\n\n-   `word` **[String][232]** 要查找的单词\n\nReturns **[Boolean][220]** \n\n## UnionFind\n\nUnionFind 并查集类\n\n### Parameters\n\n-   `size` **[Number][221]** 集合规模\n\nReturns **[UnionFind][233]** Instance\n\n### find\n\n查找p所属的集合编号\n\n#### Parameters\n\n-   `p` **[Number][221]** \n\nReturns **[Number][221]** \n\n### union\n\n链接两个元素\n\n#### Parameters\n\n-   `p` **[Number][221]** \n-   `q` **[Number][221]** \n\nReturns **void** \n\n### isConnected\n\n判断两个元素是否相连\n\n#### Parameters\n\n-   `p` **[Number][221]** \n-   `q` **[Number][221]** \n\nReturns **[Boolean][220]** \n\n### toString\n\n用来返回内部集合的情况\n\nReturns **[String][232]** \n\n## Vector\n\n### Parameters\n\n-   `_elem` **[Array][223]** 初始数组 (optional, default `[]`)\n\nReturns **[Vector][234]** Instance\n\n### size\n\n获取向量大小\n\nReturns **[number][221]** \n\n### insert\n\ne 作为秩为 r 的元素插入，原后继元素依次后移\n\n#### Parameters\n\n-   `r` **[number][221]** 插入新元素的秩 0 \u0026lt;= r \u0026lt;= size\n-   `e` **Anyone** \n\nReturns **[number][221]** \n\n### removeRange\n\n删除指定区间的元素, 原后继元素依次前移\\[lo, hi)\n\n#### Parameters\n\n-   `lo` **[number][221]** 要删除元素起始的秩 0 \u0026lt;= r \u0026lt;= size\n-   `hi` **[number][221]** 要删除元素结束的秩 0 \u0026lt;= r \u0026lt;= size\n\nReturns **[number][221]** 删除的元素数量\n\n### remove\n\n删除指定秩的元素, 原后继元素依次前移\n\n#### Parameters\n\n-   `r` **[number][221]** 要删除元素的秩 0 \u0026lt;= r \u0026lt;= size\n\nReturns **Anyone** e 删除的元素\n\n### disordered\n\n返回向量中相邻元素逆序对总数, 当返回为0则代表向量有序\n\nReturns **[Number][221]** \n\n### findElem\n\n在向量的区间 \\[lo, hi)查找元素等于 e 的最大秩\n\n#### Parameters\n\n-   `e` **Anyone** 要搜索的元素\n-   `lo` **[number][221]** 要查找的起始秩 (optional, default `0`)\n-   `hi` **[number][221]** 要查找的结束秩 (optional, default `_elem.length`)\n\nReturns **[number][221]** 等于 e 的元素最大的秩\n\n### search\n\n在有序向量的区间\\[lo, hi)查找元素e 所在的秩, 0 \u0026lt;= lo \u0026lt;= hi \u0026lt;= size\n\n#### Parameters\n\n-   `e` **Anyone** 要搜索的元素\n-   `lo` **[number][221]** 要查找的起始秩\n-   `hi` **[number][221]** 要查找的结束秩\n\nReturns **[number][221]** 不大于 e 的元素最大的秩\n\n### deduplicate\n\n剔除重复元素，保证每个元素都是唯一的\n\nReturns **[number][221]** 被删除的元素个数\n\n### uniquify\n\n有序向量剔除重复元素，保证每个元素都是唯一的\n\nReturns **[number][221]** 被删除的元素个数\n\n### traverse\n\n向量的遍历\n\n#### Parameters\n\n-   `visit` **[function][224]** 访问函数\n\nReturns **any** void\n\n### binSearch\n\n在有序向量的区间\\[lo, hi)查找元素不大于 e 的元素的最大秩, 0 \u0026lt;= lo \u0026lt;= hi \u0026lt;= size\n\n#### Parameters\n\n-   `_elem` **[Vector][234]** 要搜索的有序向量或有序数组\n-   `e` **Anyone** 要搜索的元素\n-   `lo` **[number][221]** 要查找的起始秩 (optional, default `0`)\n-   `hi` **[number][221]** 要查找的结束秩 (optional, default `_elem.length`)\n\nReturns **[number][221]** 不大于 e 的元素最大的秩\n\n### bubbleSort\n\n排序算法 起泡排序, 具有稳定性\n\n#### Parameters\n\n-   `_elem` **[Vector][234]** 要排序的向量或数据\n-   `lo` **[number][221]** 要查找的起始秩 (optional, default `0`)\n-   `hi` **[number][221]** 要查找的结束秩 (optional, default `_elem.length`)\n\nReturns **void** \n\n### merge\n\n排序算法 归并排序之合并\n\n#### Parameters\n\n-   `_elem` **[Vector][234]** 要排序的向量或数据\n-   `lo` **[number][221]** 要查找的起始秩\n-   `mi`  \n-   `hi` **[number][221]** 要查找的结束秩\n\nReturns **void** \n\n### mergeSort\n\n排序算法 归并排序\n\n#### Parameters\n\n-   `_elem` **[Vector][234]** 要排序的向量或数据\n-   `lo` **[number][221]** 要查找的起始秩 (optional, default `0`)\n-   `hi` **[number][221]** 要查找的结束秩 (optional, default `_elem.length`)\n\nReturns **void** \n\n[1]: #avl\n\n[2]: #insert\n\n[3]: #parameters\n\n[4]: #remove\n\n[5]: #parameters-1\n\n[6]: #balanced\n\n[7]: #parameters-2\n\n[8]: #avlbalanced\n\n[9]: #parameters-3\n\n[10]: #balfac\n\n[11]: #parameters-4\n\n[12]: #height\n\n[13]: #parameters-5\n\n[14]: #bst\n\n[15]: #search\n\n[16]: #parameters-6\n\n[17]: #insert-1\n\n[18]: #parameters-7\n\n[19]: #remove-1\n\n[20]: #parameters-8\n\n[21]: #removeat\n\n[22]: #parameters-9\n\n[23]: #searchin\n\n[24]: #parameters-10\n\n[25]: #binnode\n\n[26]: #parameters-11\n\n[27]: #data\n\n[28]: #parent\n\n[29]: #lc\n\n[30]: #rc\n\n[31]: #height-1\n\n[32]: #size\n\n[33]: #isroot\n\n[34]: #islchild\n\n[35]: #isrchild\n\n[36]: #hasparent\n\n[37]: #haslchild\n\n[38]: #hasrchild\n\n[39]: #haschild\n\n[40]: #hasbothchild\n\n[41]: #isleaf\n\n[42]: #sibling\n\n[43]: #uncle\n\n[44]: #fromparentto\n\n[45]: #pred\n\n[46]: #succ\n\n[47]: #insertaslc\n\n[48]: #parameters-12\n\n[49]: #insertasrc\n\n[50]: #parameters-13\n\n[51]: #travlevel\n\n[52]: #parameters-14\n\n[53]: #travpre\n\n[54]: #parameters-15\n\n[55]: #travin\n\n[56]: #parameters-16\n\n[57]: #travpost\n\n[58]: #parameters-17\n\n[59]: #swap\n\n[60]: #parameters-18\n\n[61]: #bintree\n\n[62]: #size-1\n\n[63]: #size-2\n\n[64]: #parameters-19\n\n[65]: #empty\n\n[66]: #root\n\n[67]: #root-1\n\n[68]: #parameters-20\n\n[69]: #updateheightabove\n\n[70]: #parameters-21\n\n[71]: #insertasroot\n\n[72]: #parameters-22\n\n[73]: #insertaslc-1\n\n[74]: #parameters-23\n\n[75]: #insertasrc-1\n\n[76]: #parameters-24\n\n[77]: #attachaslc\n\n[78]: #parameters-25\n\n[79]: #attachasrc\n\n[80]: #parameters-26\n\n[81]: #remove-2\n\n[82]: #parameters-27\n\n[83]: #secede\n\n[84]: #parameters-28\n\n[85]: #travlevel-1\n\n[86]: #parameters-29\n\n[87]: #travpre-1\n\n[88]: #parameters-30\n\n[89]: #travin-1\n\n[90]: #parameters-31\n\n[91]: #travpost-1\n\n[92]: #parameters-32\n\n[93]: #heap\n\n[94]: #parameters-33\n\n[95]: #size-3\n\n[96]: #percolateup\n\n[97]: #parameters-34\n\n[98]: #percolatedown\n\n[99]: #parameters-35\n\n[100]: #insert-2\n\n[101]: #parameters-36\n\n[102]: #getmax\n\n[103]: #delmax\n\n[104]: #parameters-37\n\n[105]: #properparent\n\n[106]: #parameters-38\n\n[107]: #listnode\n\n[108]: #parameters-39\n\n[109]: #insertassucc\n\n[110]: #parameters-40\n\n[111]: #insertaspred\n\n[112]: #parameters-41\n\n[113]: #list\n\n[114]: #parameters-42\n\n[115]: #size-4\n\n[116]: #first\n\n[117]: #last\n\n[118]: #insertasfirst\n\n[119]: #parameters-43\n\n[120]: #insertaslast\n\n[121]: #parameters-44\n\n[122]: #inserta\n\n[123]: #parameters-45\n\n[124]: #insertb\n\n[125]: #parameters-46\n\n[126]: #remove-3\n\n[127]: #parameters-47\n\n[128]: #disordered\n\n[129]: #findelem\n\n[130]: #parameters-48\n\n[131]: #search-1\n\n[132]: #parameters-49\n\n[133]: #deduplicate\n\n[134]: #uniquify\n\n[135]: #traverse\n\n[136]: #parameters-50\n\n[137]: #valid\n\n[138]: #parameters-51\n\n[139]: #selectmax\n\n[140]: #parameters-52\n\n[141]: #insertionsort\n\n[142]: #parameters-53\n\n[143]: #selectionsort\n\n[144]: #parameters-54\n\n[145]: #merge\n\n[146]: #parameters-55\n\n[147]: #mergesort\n\n[148]: #parameters-56\n\n[149]: #queue\n\n[150]: #enqueue\n\n[151]: #parameters-57\n\n[152]: #dequeue\n\n[153]: #front\n\n[154]: #empty-1\n\n[155]: #size-5\n\n[156]: #segmenttree\n\n[157]: #parameters-58\n\n[158]: #size-6\n\n[159]: #leftchild\n\n[160]: #parameters-59\n\n[161]: #rightchild\n\n[162]: #parameters-60\n\n[163]: #build\n\n[164]: #parameters-61\n\n[165]: #query\n\n[166]: #parameters-62\n\n[167]: #update\n\n[168]: #parameters-63\n\n[169]: #stack\n\n[170]: #push\n\n[171]: #parameters-64\n\n[172]: #pop\n\n[173]: #top\n\n[174]: #empty-2\n\n[175]: #size-7\n\n[176]: #trie\n\n[177]: #size-8\n\n[178]: #root-2\n\n[179]: #insert-3\n\n[180]: #parameters-65\n\n[181]: #find\n\n[182]: #parameters-66\n\n[183]: #unionfind\n\n[184]: #parameters-67\n\n[185]: #find-1\n\n[186]: #parameters-68\n\n[187]: #union\n\n[188]: #parameters-69\n\n[189]: #isconnected\n\n[190]: #parameters-70\n\n[191]: #tostring\n\n[192]: #vector\n\n[193]: #parameters-71\n\n[194]: #size-9\n\n[195]: #insert-4\n\n[196]: #parameters-72\n\n[197]: #removerange\n\n[198]: #parameters-73\n\n[199]: #remove-4\n\n[200]: #parameters-74\n\n[201]: #disordered-1\n\n[202]: #findelem-1\n\n[203]: #parameters-75\n\n[204]: #search-2\n\n[205]: #parameters-76\n\n[206]: #deduplicate-1\n\n[207]: #uniquify-1\n\n[208]: #traverse-1\n\n[209]: #parameters-77\n\n[210]: #binsearch\n\n[211]: #parameters-78\n\n[212]: #bubblesort\n\n[213]: #parameters-79\n\n[214]: #merge-1\n\n[215]: #parameters-80\n\n[216]: #mergesort-1\n\n[217]: #parameters-81\n\n[218]: #avl\n\n[219]: #binnode\n\n[220]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Boolean\n\n[221]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Number\n\n[222]: #bst\n\n[223]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array\n\n[224]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Statements/function\n\n[225]: #bintree\n\n[226]: #heap\n\n[227]: #listnode\n\n[228]: #list\n\n[229]: #queue\n\n[230]: #stack\n\n[231]: #trie\n\n[232]: https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String\n\n[233]: #unionfind\n\n[234]: #vector\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopen-node%2Fjstructures","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fopen-node%2Fjstructures","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopen-node%2Fjstructures/lists"}