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

转载 2007年09月27日 16:28:00
数组和链表是数据结构中老生常谈的问题,在指针或是引用这些概念出来之前,数组就能用来实现链表的功能。这里所说的链表指的就是用指针或对象的引用来设计的链表。
在实际的应用开发中,数组由于它天生的种种特性(参考《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);
}
}
 

相关文章推荐

最基本的单链表C++

// 单链表.cpp -- 最基本的单链表C++ // Singly-linked list node template class Link { public: Elem element;...

链表(一)——创建一个最基本的单向链表

1.结点 链表中用来存储一个数据的存储单元。 一个链表至少需要由两部分组成,就是数据域和指针域,一般形式的结点定义为: struct node {     Elem data; //Elem...

(2011.07.19) 单链表.cpp -- 最基本的单链表C++

// 单链表.cpp -- 最基本的单链表C++ // Singly-linked list node template class Link { public: Elem el...

(2011.07.20) 双链表.cpp -- 最基本的C++双链表

// 双链表.cpp -- 最基本的C++双链表 // Doubly-linked list link node with freelist support template class Li...

菜鸟入门_Python_机器学习(2)_最基本统计特性的证明

@sprt 写在开头:博主在开始学习机器学习和Python之前从未有过任何编程经验,这个系列写在学习这个领域一个月之后,完全从一个入门级菜鸟的角度记录我的学习历程,代码未经优化,仅供参考。有错误之处...

二叉树(一)——二叉树的基本实现(数组实现和链表实现)

1.树是一种数据结构,树的一些相关的术语: 结点的度:一个结点的后继结点的个数。 树的度:树中度值最大的结点的度被称为树的度。 树的深度:树的层次数。 分支结点:度值大于0的结点,分支结点至少含有一个...

编译原理学习笔记02——(对最基本文法的理解)——2014_1_12

其实笔记01是有些问题的,因为是今天想到的,所以不再修改笔记01,而是记入笔记02中,作为不断理解的记录。 在笔记01中,假设老外懂的基本词汇只是面和猪肉,其实还有几个:用小笼蒸的,用xx把...

最基本的理解和尊重

如果是只与自己有关的事,那么自己随便吧。 可是如果与别人有关,那就学会利他,这是最起码的理解。要跟别人商量,这是最起码的尊重。 这是对别人的尊重。要利他,与别人有关的时候,要和别人打招呼。利他,理...

kendo.mobile的理解使用,最基本框架的搭建

1 下载最新的 kendo,地址不写了 2  下面三点为构成Kendo 移动应用的几个组成部分: Application: Kendo 移动应用的主应用类,用来管理应用部分部分之间切换,应用...

线性表是最基本、最简单、也是最常用的一种数据结构。

线性表是最基本、最简单、也是最常用的一种数据结构。线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的。线性表的逻辑结构简单,便于实现和操作。因此,...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)