理解数组和链表的最基本特性

数组和链表是数据结构中老生常谈的问题,在指针或是引用这些概念出来之前,数组就能用来实现链表的功能。这里所说的链表指的就是用指针或对象的引用来设计的链表。
在实际的应用开发中,数组由于它天生的种种特性(参考《Java容器分析—数组》),更多的会被开发人员所想到用到,但所有的数据结构都有它特定的适用场合。众所周知,数组和链表最大的区别在于,使用数组能够快速访问数组中的每个元素,而使用链表可以方便的操纵每个数据项。下面通过两个很有趣的例子说明了它们各自的区别与优势。
虽然在JDK中Java提供了List接口及其接口的实现(ArrayList/LinkedList)对链表数据结构提供了有力的支持,具体可以参考《Java容器分析—List和Set》但下面数学上关于Josephus问题的实现仅使用了自定义的最简单的链表结构。
程序代码 程序代码
/**
* 根据命令行输入的N值,计算出所有小于N的素数
* 是素数将数组元素值设为true,否则设为false
*/
class ArrayApp {
  public static void main(String[] args) {
int N = Integer.parseInt(args[0]);
boolean[] a = new boolean[N];

for (int I = 2; I
  a[i] = true;
for (int I = 2; I
  if (a[i] != false)
    for (int j = I; j*I
      a[i*j] = false;
for (int I = 2; I
  if (a[i])
    System.out.println(“” + i);
}
}
/**
* N个有编号的小球围成一圈,每个M-1个就拿去一个小球,计算最后剩下的球的位置
*/
class LinkApp {
  static class Node {
int value;
Node next;
Node (int v) { v = value; }
}
public static void main(String[] args) {
  int N = Integer.parseInt(args[0]);
  int M = Integer.parseInt(args[1]);
  Node first = new Node(1);
  Node x = first;
  for (int I = 2; I
    x = (x.next = new Node(i));
  x.next = first;
  while (x != x.next) {
    for (int I = 1; I
      x = x.next;
    x.next = x.next.next;
}
System.out.println(“最后剩下的小球:” + x.value);
}
}
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值