data-structures - 链表的应用

标签 data-structures language-agnostic linked-list

链表应用的一些好的例子是什么?我知道将队列和堆栈实现为链表是一个好主意,但是是否有链表解决专门利用快速插入时间的问题的实际且直接的示例?不仅仅是基于链表的其他数据结构。

希望得到类似于这个关于优先级队列的问题的答案:Priority Queue applications

我自己找到了一个:用哈希表和链表实现的 LRU(最近最少使用)缓存。

还有Exception的例子具有 InnerExeption 的类

那里还有什么?

最佳答案

我在美国的一个“大型股票市场”担任开发人员。使我们以非常快的速度运行的部分原因是我们在初始化之后(在市场上一天开始之前)不进行任何堆分配/取消分配。这种技术并不是交易所独有的,它在大多数实时系统中也很常见。

首先,对我们来说,链接列表比基于数组的列表更受欢迎,因为它们在列表增长或收缩时不需要堆分配。我们在交易所的多个应用程序中使用链表。

  • 一种应用是在初始化期间将所有对象预分配到池中(即链表);所以每当我们需要一个新对象时,我们可以删除列表的头部。
  • 另一个应用程序正在订单处理中;每个 Order 对象都实现了一个链表入口接口(interface)(具有前一个和下一个引用),因此当我们收到客户的订单时,我们可以从池中移除一个 Order 对象并将其放入“待处理”列表中。由于每个 Order 对象都实现了一个链接列表条目,因此在列表中的任何位置添加都与填充上一个和下一个引用一样简单。

  • 我脑海中的例子:
    Interface IMultiListEntry {
    
        public IMultiListEntry getPrev(MultiList list);
        public void setPrev(MultiList list, IMultiListEntry entry);
    
        public IMultiListEntry getNext(MultiList list);
        public void setNext(MultiList list, IMultiListEntry entry);
    
    }
    
    Class MultiListEntry implements IMultiListEntry {
    
        private MultiListEntry[] prev = new MultiListEntry[MultiList.MAX_LISTS];
        private MultiListEntry[] next = new MultiListEntry[MultiList.MAX_LISTS];
    
        public MultiListEntry getPrev(MultiList list) {
            return prev[list.number];
        }
        public void setPrev(MultiList list, IMultiListEntry entry) {
            prev[list.number] = entry;
        }
    
        public IMultiListEntry getNext(MultiList list) {
            return next[list.number];
        }
        public void setNext(MultiList list, IMultiListEntry entry) {
            next[list.number] = entry;
        }
    
    }
    
    Class MultiList {
    
        private static int MAX_LISTS = 3;
        private static int LISTS = 0;
    
        public final int number = LISTS++;
    
        private IMultiListEntry head = null;
        private IMultiListEntry tail = null;
    
        public IMultiListEntry getHead() {
            return head;
        }
    
        public void add(IMultiListEntry entry) {
            if (head==null) {
                head = entry;
            } else {
                entry.setPrevious(this, tail);
                tail.setNext(this, entry);
            }
            tail = entry;
        }
    
        public IMultiListEntry getPrev(IMultiListEntry entry) {
            return entry.getPrev(this);
        }
        public IMultiListEntry getNext(IMultiListEntry entry) {
            return entry.getNext(this);
        }
    }
    

    现在您所要做的就是扩展 MultiListEntry 或实现 IMultiListEntry 并将接口(interface)方法委托(delegate)给 MultiListEntry 对象的内部引用。

    关于data-structures - 链表的应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18801508/

    相关文章:

    python - 使作为不可变对象(immutable对象)的键的值具有多个引用,以便它们可以被任何这些引用更改

    python - 树的数据结构

    language-agnostic - 什么是最简洁的编程语言?

    security - 通过使用更长的密文获得额外的安全性

    language-agnostic - 存在哪些 "time precise"垃圾回收算法?

    c++ - 动态链接列表 RPG 库存程序 - 帮助(如何链接到类?)

    algorithm - 堆 - 对未知输入执行 DeleteMax 操作 - 实现

    java - 测试两个二叉树是否相等的最有效方法

    c - 为什么使用 free() 会导致无限循环

    python - 在python中将两个排序的链表合并为一个链表