作者:Flyingis<o:p></o:p>
<o:p> </o:p>
数组和链表是数据结构中老生常谈的问题,在指针或是引用这些概念出来之前,数组就能用来实现链表的功能。这里所说的链表指的就是用指针或对象的引用来设计的链表。<o:p></o:p>
在实际的应用开发中,数组由于它天生的种种特性(参考《Java容器分析—数组》),更多的会被开发人员所想到用到,但所有的数据结构都有它特定的适用场合。众所周知,数组和链表最大的区别在于,使用数组能够快速访问数组中的每个元素,而使用链表可以方便的操纵每个数据项。下面通过两个很有趣的例子说明了它们各自的区别与优势。<o:p></o:p>
虽然在JDK中Java提供了List接口及其接口的实现(ArrayList/LinkedList)对链表数据结构提供了有力的支持,具体可以参考《Java容器分析—List和Set》但下面数学上关于Josephus问题的实现仅使用了自定义的最简单的链表结构。<o:p></o:p>
/**<o:p></o:p>
* 根据命令行输入的N值,计算出所有小于N的素数<o:p></o:p>
* 是素数将数组元素值设为true,否则设为false<o:p></o:p>
*/<o:p></o:p>
class ArrayApp {<o:p></o:p>
public static void main(String[] args) {<o:p></o:p>
int N = Integer.parseInt(args[0]);<o:p></o:p>
boolean[] a = new boolean[N];<o:p></o:p>
for (int i = 2; i < N; i++)<o:p></o:p>
a[i] = true;<o:p></o:p>
for (int i = 2; i < N; i++)<o:p></o:p>
if (a[i] != false)<o:p></o:p>
for (int j = i; j*i < N; j++)<o:p></o:p>
a[i*j] = false;<o:p></o:p>
for (int i = 2; i < N; j++)<o:p></o:p>
if (a[i])<o:p></o:p>
System.out.println(“” + i);<o:p></o:p>
}<o:p></o:p>
}<o:p></o:p>
/**<o:p></o:p>
* N个有编号的小球围成一圈,每个M-1个就拿去一个小球,计算最后剩下的球的位置<o:p></o:p>
*/<o:p></o:p>
class LinkApp {<o:p></o:p>
static class Node {<o:p></o:p>
int value;<o:p></o:p>
Node next;<o:p></o:p>
Node (int v) { v = value; }<o:p></o:p>
}<o:p></o:p>
public static void main(String[] args) {<o:p></o:p>
int N = Integer.parseInt(args[0]);<o:p></o:p>
int M = Integer.parseInt(args[1]);<o:p></o:p>
Node first = new Node(1);<o:p></o:p>
Node x = first;<o:p></o:p>
for (int i = 2; i <= N; i++)<o:p></o:p>
x = (x.next = new Node(i));<o:p></o:p>
x.next = first;<o:p></o:p>
while (x != x.next) {<o:p></o:p>
for (int i = 1; i < M; i++)<o:p></o:p>
x = x.next;<o:p></o:p>
x.next = x.next.next;<o:p></o:p>
}<o:p></o:p>
System.out.println(“最后剩下的小球:” + x.value);<o:p></o:p>
}<o:p></o:p>
}<o:p></o:p>
分享到:
相关推荐
数组和链表是数据结构中最基础的两种数据组织方式,它们在计算机科学和软件工程领域...通过复习这些基础内容,可以帮助初学者更好地理解数组和链表的特性和使用场景,为进一步学习复杂的数据结构和算法打下坚实的基础。
数组和链表是两种基本且常用的数据结构,它们各有优缺点,适用于不同的场景。 数组是一种顺序存储结构,它在内存中占据一块连续的空间。数组的主要优点在于其随机访问的高效性,可以通过索引直接访问任意位置的元素...
在计算机科学中,数组与链表是最基础也是最重要的两种数据结构。它们各自拥有独特的特点和应用场景,掌握这两种数据结构的区别对于理解和解决实际问题至关重要。 #### 二、基于空间的考虑 **1. 数组** 数组是一种...
数组和链表是两种基本的数据结构,它们在存储和处理数据方面有着不同的特性和应用场景。 首先,数组是一种线性数据结构,它在内存中分配了一段连续的空间来存储相同类型的数据。数组的主要优点在于它的随机访问性能...
总的来说,理解数组和链表的差异是提升编程技能的关键步骤,这有助于我们在编写代码时根据实际需求选择最合适的数据结构,从而提高程序性能和可维护性。在PHP的开发实践中,熟练掌握这两种数据结构及其应用场合,能...
数组和链表是两种最基本且常用的数据结构,各自有着独特的特性和应用场景。 数组是一种线性数据结构,它在内存中占据一块连续的空间。数组的大小在创建时即被固定,无法动态扩展或收缩。数组的每个元素占用相同大小...
数组和链表是两种基本的数据结构,它们各自有其独特的优缺点,适用于不同的场景。理解它们的特点对于优化算法和设计高效的数据结构至关重要。 数组是一种线性数据结构,它在内存中占据连续的空间,每个元素都有一个...
在计算机科学中,数据结构是...理解这两种数据结构的特性并合理运用,能有效提高程序的性能和效率。在实际编程中,Java提供了ArrayList和LinkedList两种内置的列表实现,分别基于数组和链表,可以根据需要选择使用。
这个简单的实现虽然没有涵盖Java SDK中HashMap的所有特性,如动态扩容、负载因子等,但它清晰地展示了哈希表的基本工作原理:使用数组存储,通过哈希函数定位,利用链表解决冲突。这种实现方式对于理解HashMap的内部...
在Python中,数组和链表是两种基本的数据结构,它们在处理数据时有着不同的特性和应用场景。本篇文章将深入探讨这两种数据结构的实现,并结合LeetCode题目进行实战演练。 首先,我们来看数组。数组是一种线性表的...
### 数组和链表的基本概念 #### 数组 数组是一种基本的数据结构,它在内存中分配了一段连续的空间来存储相同类型的数据项。数组中的每个元素可以通过其索引来访问,索引通常是从0开始的整数。由于数组的内存布局是...
数组和链表是两种常见的线性数据结构,它们在逻辑结构和内存管理上有显著的差异。 首先,从逻辑结构的角度来看,数组是一种顺序存储的数据结构,其中每个元素都有一个唯一的索引或下标,通过这个下标可以直接访问到...
通过这种方式,我们可以更好地理解和比较数组与链表在实际应用中的优缺点。 在进行实际编程时,可以参考上述代码,结合具体需求进行调整和优化。例如,可以添加更多的方法来支持链表的其他操作,如查找、反转等。...
数组和链表是两种基本的数据结构,它们在存储和访问数据方面有显著的差异,各自具有独特的优点和适用场景。了解这些区别对于理解和优化算法至关重要。 首先,数组是一种线性的数据结构,其特点是所有元素在内存中是...
在计算机科学中,大数(Big Number)是指那些超过普通整型或浮点型...无论是链表还是数组,实现大数运算都需要对位操作、进位/借位规则以及数据结构的特性有深刻理解。这不仅是理论知识的运用,也是编程技巧的实践。
总的来说,“数据结构的学习——数组和链表.zip”资料包提供了对C语言中这两种基本数据结构的深入理解和实践,涵盖了动态数组的管理以及链表的基本操作和应用,为深入学习数据结构和算法打下坚实基础。
将这三者结合,可能是在设计一种混合数据结构,比如一种结合了数组的随机访问优势和链表动态扩展特性的数据结构。这可能是为了实现一个高效的动态数组,或者是一种自平衡的树结构,如B树或B+树,它们将数据分块存储...
通过阅读和理解提供的压缩包文件"stack",我们可以预期其中包含的源代码展示了如何用C语言分别使用数组和链表实现栈的全部功能。这些源码可以作为学习和理解栈实现的实例,帮助我们更好地掌握这两种数据结构在实际...
总的来说,使用数组表示循环链表来解决约瑟夫环问题是一种巧妙的方法,它结合了数组的高效访问和链表的循环特性,为编程挑战提供了一个有趣的解决方案。通过理解这个算法,不仅可以提升编程技巧,还能深入理解数据...
动态数组和链表虽然都是数据结构,但它们各自具有不同的特性和用途,理解它们之间的交互可以增强我们对数据结构设计的理解。 链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和指向下一个节点的引用。...