2019年3月30日
摘要: 之前分析了红黑树的删除,这里附上红黑树的完整版代码,包括查找、插入、删除等。删除后修复实现了两种算法,均比之前的更为简洁。一种是我自己的实现,代码非常简洁,行数更少;一种是Linux、Java等源码版本的实现,实现的略为复杂,但效率更高。两种算法经过测试,在百万级的数据上效率不分伯仲;1000万的数 阅读全文
posted @ 2019-03-30 21:14 Burkut 阅读(646) 评论(0) 推荐(0) 编辑
  2019年3月26日
摘要: 对于红黑树的删除,看了数据结构的书,也看了很多网上的讲解和实现,但都不满意。很多讲解都是囫囵吞枣,知其然,不知其所以然,讲的晦涩难懂。 红黑树是平衡二叉树的一种,其删除算法是比较复杂的,因为删除后还要保持红黑树的特性。红黑树的特性如下: 因此,从红黑树最基础的特性出发,抛开教科书和网上的算法,画了无 阅读全文
posted @ 2019-03-26 15:55 Burkut 阅读(879) 评论(1) 推荐(0) 编辑
  2019年3月1日
摘要: 用dart语言实现的二叉树,实现了插入、查找、删除,中序遍历、前序、后序遍历等功能。 阅读全文
posted @ 2019-03-01 17:55 Burkut 阅读(661) 评论(0) 推荐(0) 编辑
  2019年2月22日
摘要: 研究了网上大部分的希尔排序代码,发现大部分都是互相抄的——因为网上甚至某些书上的实现大部分都是错的。希尔排序是插入排序的升级版,通过引入间隔,然后分组进行插入排序。再逐步缩小间隔,直至间隔为1时,做全数组的插入排序。dart 代码如下: 阅读全文
posted @ 2019-02-22 13:54 Burkut 阅读(344) 评论(0) 推荐(0) 编辑
  2019年1月22日
摘要: 这一定要mark一下。虽然链表的实现很简单,且本次只实现了一个方法。但关键的是例子:单向链表的反转。这是当年我去H公司面试时,面试官出的的题目,而当时竟然卡壳了。现在回想起来,还是自己的基本功不扎实,代码写的太少。所以现在趁闲暇之余,补课补起来。 阅读全文
posted @ 2019-01-22 15:06 Burkut 阅读(621) 评论(0) 推荐(0) 编辑
  2019年1月15日
摘要: 之前发过一篇stack的实现,是采用dart内置的List类并固定长度数组实现的。这里重新实现一版,重复利用List类内置特性和方法。实现更为简洁。 阅读全文
posted @ 2019-01-15 16:57 Burkut 阅读(736) 评论(0) 推荐(0) 编辑
摘要: 计算器的bin/calc.dart 可执行代码: 阅读全文
posted @ 2019-01-15 16:53 Burkut 阅读(403) 评论(0) 推荐(0) 编辑
摘要: 本文用stack实现了一个计算器,支持括号、小数、负数。代码比较简单,没加什么注释。实际使用时,读取用户在stdin的输入,然后计算。若格式错误,会抛出异常。 在实际计算过程中,实际分为三步: 消除输入的空格; 表达式预处理和预计算,这一步将表达式字符串解析为数字、操作符和括号。如果是括号的话,在预 阅读全文
posted @ 2019-01-15 16:49 Burkut 阅读(885) 评论(0) 推荐(0) 编辑
  2019年1月11日
摘要: 参考教科书上的一个应用例子,用栈来分析一行输入中的括号brackets是否匹配。用stdin读取用户输入,并输出检查结果。exit 退出。 注意这行代码: 阅读全文
posted @ 2019-01-11 23:45 Burkut 阅读(563) 评论(0) 推荐(0) 编辑
摘要: 用dart 语言实现一个简单的stack(栈)。栈的内部用List实现。 阅读全文
posted @ 2019-01-11 18:25 Burkut 阅读(878) 评论(0) 推荐(0) 编辑