
数据结构
浴盆
这个作者很懒,什么都没留下…
展开
-
二分搜索树
Linked List链表即是由节点(Node)组成的线性集合,每个节点可以利用指针指向其他节点。它是一种包含了多个节点的、能够用于表示序列的数据结构。 单向链表: 链表中的节点仅指向下一个节点,并且最后一个节点指向空。(没有循环的话最后一个节点都是指向null) 双向链表: 其中每个节点具有两个指针 p、n,使得 p 指向先前节点并且 n 指向下一个节点;最后一个节点的 n 指针指向 null翻译 2017-03-17 20:36:36 · 684 阅读 · 0 评论 -
栈和队列的基本应用
给定一个字符串,只包含{,[, (,),],},判断字符串的括号匹配是否合法。如(),()[]{}是合法的,而(]是不合法的 假设一个字符串'{[()]}',当我们遍历时遇到左操作符的时候,就将它压入栈中,当遇到右操作符的时候,就与栈顶的元素匹配,如果match就将栈顶的左操作符弹出,继续遍历。翻译 2017-04-12 21:15:02 · 2793 阅读 · 0 评论 -
二叉树递归
递归终止条件我们来看一下二分搜索树的释放,这就是一个典型的递归问题 function destroy(node){ if(node == null) return; //如果当前节点不为空,则释放节点的左节点和右节点 destroy(node.left); destroy(node.right); delete node;翻译 2017-04-12 21:16:53 · 435 阅读 · 0 评论 -
堆
线性阶 循环体中代码要执行n次 int i; for(i = 0; i i++) { /* 时间复杂度为O(1)的程序步骤系列 */ } 对数阶 int count; while(count < n) { count = count * 2; } 有多少个2相乘后大于n才会退出循环,所以这个的复杂度是O(logn)翻译 2017-04-12 21:25:36 · 467 阅读 · 0 评论 -
快速排序优化
基本思想 快速排序使用分治的思想,通过一趟排序将待排序列分隔成两部分,其中一部分的关键字比另一部分的关键字小。分别对这两部分记录继续进行排序,以达到整体有序的目的 快速排序的三个步骤 选择基准。在待排序列中选择一个元素,作为’基准’(pirot) 分割操作。以该基准在序列中的实际位置,把序列分成两个子序列,在基准左边的数都比该基准小,在基准右边的数都比该基准大 递归地对两个序列进行排序原创 2017-04-12 21:11:29 · 421 阅读 · 0 评论 -
js中模拟链表
js中数组的主要问题是,它们被实现成了对象,与其他语言的数组相比,效率很低。如果发现数组在实际使用时很慢,就可以考虑使用链表来代替它。 function Node(element){ //element属性保存任何传入的数据 this.element = element; this.next = null; } function LinkedLis原创 2017-02-12 16:28:43 · 609 阅读 · 0 评论 -
js中模拟队列
队列是一种先进先出的数据结构,队列的主要操作是向队列中插入新元素和删除队列中的元素,入队操作在队尾插入新元素,出队操作删除队头的元素。还有一个重要操作是读取队头的元素peek,底层的数据结构选用数组,这里通过使用js数组对象中shift和push方法简化代码。队列的构造函数如下: function Queue(){ this.dataStore = []; this.原创 2017-02-12 14:05:17 · 637 阅读 · 0 评论 -
js中模拟栈
栈是一种特殊的列表,栈内的元素只能通过栈顶来访问。对栈的两种主要操作是将一个元素压入栈和将一个元素弹出栈,入栈使用push方法,出栈使用pop方法。另一个方法peek是查询返回栈顶元素。 function Stack(){ //底层存储为一个数组 this.dataStore = []; this.top = 0; this.push = push; t原创 2017-02-11 22:17:27 · 745 阅读 · 0 评论