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

转载 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);
}
}
 

[数据结构] 数组与链表的优缺点和区别

概述   数组 是将元素在内存中连续存放,由于每个元素占用内存相同,可以通过下标迅速访问数组中任何元素。但是如果要在数组中增加一个元素,需要移动大量元素,在内存中空出一个元素的空间,然后将要增加...
  • SNOW_wu
  • SNOW_wu
  • 2016年11月15日 16:25
  • 3652

理解矩阵和特征向量的本质

理解矩阵和特征向量的本质 原文地址 最近复习矩阵论中,又是一堆定理和证明突然发现学了这么常时间的矩阵论、线性代数,记住的只是一堆莫名其妙的定理而已,一些本质的东西都没有搞清...
  • sduuntion
  • sduuntion
  • 2013年11月07日 20:09
  • 4915

线性表链式存储的实现详解

线性表的链式存储,c,数据结构
  • wj903829182
  • wj903829182
  • 2014年07月28日 09:48
  • 1165

最基本的单链表C++

// 单链表.cpp -- 最基本的单链表C++ // Singly-linked list node template class Link { public: Elem element;...
  • wwj_748
  • wwj_748
  • 2011年09月17日 13:42
  • 972

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

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

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

// 单链表.cpp -- 最基本的单链表C++ // Singly-linked list node template class Link { public: Elem el...
  • neicole
  • neicole
  • 2011年07月19日 11:43
  • 1939

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

// 双链表.cpp -- 最基本的C++双链表 // Doubly-linked list link node with freelist support template class Li...
  • neicole
  • neicole
  • 2011年07月20日 11:52
  • 928

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

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

栈和队列的基本实现(数组实现和链表实现)

基本知识: 队列:先进先出。场景:排队购票 栈:先进后出。 场景:邮箱对栈和队列的基本操作,通过数组和链表进行实现 import java.util.LinkedList;/** * * ...
  • qq_33098039
  • qq_33098039
  • 2017年11月28日 10:49
  • 37

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

1.树是一种数据结构,树的一些相关的术语: 结点的度:一个结点的后继结点的个数。 树的度:树中度值最大的结点的度被称为树的度。 树的深度:树的层次数。 分支结点:度值大于0的结点,分支结点至少含有一个...
  • laoniu_c
  • laoniu_c
  • 2014年08月05日 16:14
  • 2085
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:理解数组和链表的最基本特性
举报原因:
原因补充:

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