Tag: 数据结构

LinkedBlockingQueue vs ConcurrentLinkedQueue

我的问题与之前提到的这个问题有关 。 在我使用生产者和消费者线程之间的通信队列的情况下,人们通常会推荐使用LinkedBlockingQueue或ConcurrentLinkedQueue ? 使用其中一个的优点/缺点是什么? 我从APIangular度看到的主要区别是LinkedBlockingQueue可以有select地绑定。

二叉search树在哈希表上的优势

二叉search树比哈希表有什么优势? 哈希表可以在Theta(1)时间内查找任何元素,添加一个元素也是一样容易的……但我不确定相反的优势。

数据结构是“侵入性”意味着什么?

我已经看到用于描述数据结构(如列表和堆栈)的术语intrusive ,但这是什么意思? 你能给出一个侵入式数据结构的代码示例,以及它与非侵入式数据结构有什么不同? 另外,为什么让它侵入(或非侵入性)? 有什么好处? 有什么缺点?

数据结构:插入,删除,包含,得到随机元素,全部在O(1)

面试中我遇到了这个问题。 你会如何回答? devise一个在O(1)时间内提供以下操作的数据结构: 插 去掉 包含 得到随机元素

为什么我应该使用Deque over Stack?

我需要一个Stack结构为我的用例。 我应该能够将项目推入数据结构,我只想从堆栈中检索最后一个项目。 JavaDoc for Stack说: Deque接口及其实现提供了更完整和一致的LIFO堆栈操作集,应优先使用这个类。 例如: Deque<Integer> stack = new ArrayDeque<>(); 我绝对不希望同步行为在这里,因为我将这个数据结构本地使用的方法。 除此之外,为什么我更喜欢Deque over Stack ? PS:来自Deque的javadoc说: Deques也可以用作LIFO(后进先出)堆栈。 这个接口应该优先于传统的Stack类来使用。

何时selectRB树,B-Tree或AVL树?

作为程序员,我应该什么时候考虑使用RB树,B-树或AVL树? 在决定select之前,需要考虑哪些关键点? 有人可以解释一下每个树形结构的场景,为什么它是参照关键点select的?

在IGrouping中获取“Value”属性

我有一个像数据结构 public DespatchGroup(DateTime despatchDate, List<Products> products); 而我正在尝试做… var list = new List<DespatchGroup>(); foreach (var group in dc.GetDespatchedProducts().GroupBy(i => i.DespatchDate)) { // group.Values is not correct… how do I write this? list.Add(new DespatchGroup(group.Key, group.Values); } 我显然不理解IGrouping因为我无法看到如何实际获得组内的数据logging!

基于数字基础系统的algorithm?

我最近注意到,有很多algorithm在部分或全部基于数字在创意基础上的巧妙使用。 例如: 二项堆是基于二进制数的,而更复杂的二项二项堆是基于二进制数的偏斜。 一些用于产生字典顺序排列的algorithm基于事实数字系统。 尝试可以被认为是树木,每次看一个string的数字,为适当的基础。 霍夫曼编码树被devise为使得树中的每个边在一些二进制表示中编码零或一。 斐波那契编码被用于斐波纳契search并且反转某些types的对数。 我的问题是: 还有哪些其他algorithm使用一个聪明的数字系统作为直觉或certificate的关键步骤? 。 我正在考虑围绕这个问题进行一个讨论,所以我必须得到的例子越多越好。

数据结构Tree和Graph有什么区别?

从学术angular度讲,数据结构Tree和Graph之间的本质区别是什么? 那么基于树的search和基于图的search呢?

用Java以recursion方式反转链接列表

现在我一直在为一个类的Java项目工作。 它是一个链表的实现(这里叫做AddressList ,包含简单的节点叫做ListNode )。 问题是,一切都必须用recursionalgorithm来完成。 我能够做的一切都很好的方法之一: public AddressList reverse() ListNode: public class ListNode{ public String data; public ListNode next; } 现在我的reverse函数只是调用一个帮助函数,它需要一个参数来允许recursion。 public AddressList reverse(){ return new AddressList(this.reverse(this.head)); } 与我的帮助函数具有private ListNode reverse(ListNode current)的签名。 目前,我有迭代使用堆栈,但这不是规范要求。 我已经find了一个C语言的algorithm,它recursion地反转并手动将其转换为Java代码,并且它工作正常,但是我对此不了解。 编辑:没关系,我在此期间计算出来了。 private AddressList reverse(ListNode current, AddressList reversedList){ if(current == null) return reversedList; reversedList.addToFront(current.getData()); return this.reverse(current.getNext(), reversedList); } 虽然我在这里,有没有人看到这条路线的任何问题?