Tag: doubly linked list

从头开始使用双向链接列表的LRU缓存 – moveToHead(Java)

我已经实现了一个简单的LRU缓存作为从头开始手动编写的双向链表。 缓存中填充了由数字(整数)ID区分的对象Request。 这些请求对象被生成为针对一组N <L个预定义的请求对象的L个随机独立且相同分布的请求的流,并且逐个地(即以串行方式)到达高速缓存。 然后我检查缓存命中或未命中以及当前缓存大小是否已达到最大缓存大小,然后根据具体情况,我执行将请求的项目插入缓存或从请求的项目替换LRU缓存项目。 缓存的其中一个操作如下:当我有缓存命中时,如果请求的项目不在头部,则必须将其移动到那里。 举个例子,假设缓存的最大大小为M = 4,其给定时间的内容如下: 货号:7 | 3 | 4 | 五 缓存位置索引:0 | 1 | 2 | 3(头是0,尾是3) 现在,如果我们有一个项目4的缓存命中,由于这个项目不在缓存的头部,它应该被移动到那里,结果将是: 货号:4 | 7 | 3 | 五 缓存位置索引:0 | 1 | 2 | 3(头是0,尾是3) 但是,当我运行代码时,结果是这样: 货号:4 | 7 | 3 | 4 | 五 缓存位置索引:0 | 1 | 2 | 3 […]

双链表上的QuickSort

我想在同步双链表上实现QuickSort算法。 我给左边框和右边框的function“分区”,然后它开始搜索左侧的较低值并将较大的值放在右侧。 这是有效的,因为我的枢轴元素总是最右边的,并且在这个步骤之后它位于中间。 我总是得到一个无尽的循环,我不知道为什么? 也许错误的中止条件? 她的代码: private void quickSortRec(DoublyLinkedList in, ListElement l, ListElement r) { ListElement pivot = partition(in, l, r); if(pivot!=null && l!=r){ quickSortRec(in, in.first, pivot.prev); quickSortRec(in, pivot.next, in.first.prev); } } public ListElement partition(DoublyLinkedList in, ListElement l, ListElement r){ ListElement pivot = r; ListElement walker = l; if(l!=r){ while(walker != pivot){ if(walker.getKey() >= pivot.getKey()){ […]