原文在
这里, 是一个简化的跳跃表实现, 非常浅显易懂.
public class SkipListExample {
private static Node Head = null;
private static Node Tail = null;
private static Node Current = null;
// Records previous quarter or half mark
private static Node quarter = null;
private static Node half = null;
public static void main(String[] args) {
int ListCount = 100;
// Setup a standard double linked list manually
for (int i = 1; i <= ListCount; i++) {
Node newNode = new Node();
newNode.data = i;
// Assign to head node if this is the first node
if (Head == null) {
Head = newNode;
Tail = newNode;
Current = newNode;
quarter = newNode;
half = newNode;
}
else {
Current.next = newNode;
newNode.prev = Current;
// Add a quarter pointer if this node is a multiple of 25
if ((i % 25) == 0) {
newNode.prevQuarter = quarter;
quarter.nextQuarter = newNode;
quarter = newNode;
}
// Add a half pointer if this node is a multiple of 50
if ((i % 50) == 0) {
newNode.prevHalf = half;
half.nextHalf = newNode;
half = newNode;
}
// Set current node to be the next in line, set the tail
// and then loop back around for next node.
Current = newNode;
Tail = newNode;
}
}
// Run some tests
System.out.println("Find number 7... ");
FindNumber(7);
System.out.println("Find Number 33... ");
FindNumber(33);
System.out.println("Find number 67... ");
FindNumber(67);
System.out.println("Find number 101... ");
FindNumber(101);
}
// Searches our skip lists to locate our number
public static void FindNumber(int num) {
Node currentNode = Head;
boolean Found = false;
while (currentNode != null) {
// Simply show what nodes we have checked in our search
System.out.println("Checked node with data: " + currentNode.data);
// End search if value is greater than the value we are looking for.
if (currentNode.data > num) { break; }
// Check our various pointers to see if a jump would get us closer.
if (currentNode.data != num) {
if ((currentNode.nextHalf != null) && (currentNode.nextHalf.data <= num)) { currentNode = currentNode.nextHalf; }
else if ((currentNode.nextQuarter != null) && (currentNode.nextQuarter.data <= num)) { currentNode = currentNode.nextQuarter; }
else { currentNode = currentNode.next; }
}
else {
Found = true;
break;
}
}
// Report our findings
if (Found) { System.out.println("Number Found!"); }
else { System.out.println("Number wasn't found!"); }
}
}
// Our Node object with prev/next pointers and jump pointers
class Node {
public int data;
public Node next = null;
public Node prev = null;
// Specialized skip list pointers
public Node nextHalf = null;
public Node prevHalf = null;
public Node nextQuarter = null;
public Node prevQuarter = null;
}
分享到:
相关推荐
在Unity3D中,每个游戏对象都有一个或多个组件,如Transform(变换)、Mesh Renderer(网格渲染器)、Rigidbody(刚体)等。通过这些组件,我们可以控制物体的外观、物理属性和行为。 5. **脚本编写** 使用C#编写...
二叉树是最简单的一种,每个节点最多有两个子节点,分为左子节点和右子节点。二叉搜索树是一种特殊的二叉树,其中每个节点的左子树只包含小于该节点的元素,右子树包含大于或等于该节点的元素。平衡二叉树如AVL树和...
Boyer-Moore算法则更进一步,根据模式的后缀信息预计算一个跳跃表,允许我们在不匹配时跳过更多字符。 在`模式匹配.cs`文件中,你可能找到了一个实现这些高级算法的例子。分析并理解这些代码可以帮助你提升对C#模式...
在现代数字生活中,我们总是渴望寻找新奇的途径来增添生活的乐趣,而“桌面翠鸟.rar”文件就是一个将计算机桌面转化为充满活力娱乐空间的绝佳例子。这个看似普通的压缩包文件,实际上可能是一扇通往虚拟互动世界的门...
IS是最简单的转座子形式,通常含有短的正向重复序列(direct repeats, DR)和反向重复序列(inverted repeats, IR)。这些序列在转座过程中起到关键作用。IS家族成员众多,长度在1kb左右,主要编码转座酶,参与转座...
非线性方程的求解是另一个应用随机算法的例子,可以通过在特定区间内随机选取点,根据残差精度来寻找近似解。如果随机搜索的步长和方向经过适当设计,这种方法可以作为确定性算法如二分法、不动点迭代或牛顿法的补充...
10.3.1 一个CONNECT BY的例子 274 10.3.2 使用RSF的例子 275 10.3.3 RSF的限制条件 276 10.3.4 与CONNECT BY的不同点 276 10.4 复制CONNECT BY的功能 277 10.4.1 LEVEL伪列 278 10.4.2 SYS_CONNECT_BY_PATH...
彼德的故事是一个生动的例子,告诉我们做人做事不应过于贪婪,否则可能会一无所获。 寓言故事的象征意义也是不容忽视的。小狗彼德和水中的骨头分别象征着追求目标的人们和他们所追求的东西。这个故事通过彼德的经历...
1. **画一画,说一说**:这部分旨在帮助学生理解跳跃距离与步数之间的关系,通过小青蛙跳跃的例子,让学生填写出不同步数对应的格数,培养学生的推理能力和简单的乘法概念。 2. **摆一摆,填一填**:通过摆放物体的...
以下是一个简单的例子: ```java Pageable pageable = PageRequest.of(pageNumber, pageSize); Page<YourEntity> page = yourRepository.findAll(pageable); ``` 这里,`pageNumber`是当前页的索引,通常从0开始,...
这是一篇半命题作文,它留给学生一个自由发挥的空间,让学生根据自己的经历和情感,填入恰当的词语,构建起一个完整的故事。这样的作文题型既具有开放性,又不失指导性,要求学生在写作过程中把握住记叙文的基本要素...
总结来说,《Flash情侣贺卡心动画素材》不仅仅是一个简单的动画,它是一个丰富的学习资源,涵盖了ActionScript编程、图形动画制作、用户交互设计等多个方面的知识。通过深入研究这份源码,开发者不仅能提升自己的...
2. **连续运算**:在后续的例子中,如淘气的跳绳次数和笑笑踢毽子的次数,显示了如何进行连续的加减运算,即在一个计算过程中先进行一次加法或减法,然后用结果再进行另一次运算。例如,淘气跳绳的总次数是第一次...
4. **跳跃表**:一种随机化的数据结构,用以实现类似于平衡树的功能,但使用链表而非树来表示数据,因此更容易实现且性能更稳定。 5. **伸展树**:一种能够自我调整的二叉查找树,通过伸展操作(将节点移动到根部)...
字符串匹配是计算机科学中一个基础且重要的问题,广泛应用于文本搜索、数据分析等领域。在这个主题中,我们将探讨三种经典的字符串匹配算法:穷举法、KMP(Knuth-Morris-Pratt)算法和BM(Boyer-Moore)算法。 1. *...
- **摆锤系统**(非线性连续时间系统):通过一个简单的摆锤模型来展示非线性连续时间系统的特点。该模型考虑了重力作用下的摆动行为,揭示了非线性系统的复杂动态。 - **逻辑斯蒂映射**(非线性离散时间系统):这...
一个简单的例子是将单词中的每个字母变成其后第四个字母,这样原本的单词就变得难以辨认。在顺序结构的程序设计中,这样的加密过程可以通过多层的条件判断语句来实现。 除了上述各种应用,C语言中的输入输出语句是...
一个简单的例子便能说明语言的力量。一个在纽约街头乞讨的失明乞丐,最初因为单调的信息并未获得太多关注,直到一位诗人改动了他展示给路人的牌子上的文字,情况发生了变化。诗人的文字“春天即将到来,但我无法亲眼...
一个简单的例子是,角色的行走状态可以基于玩家的按键输入而改变,如下所示: ```python if is_running: # 角色正在跑动 move_character(direction, speed) elif is_jumping: # 角色正在跳跃 jump_character...