`
flyingis
  • 浏览: 290142 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

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

阅读更多

作者:Flyingis<o:p></o:p>

<o:p> </o:p>

数组和链表是数据结构中老生常谈的问题,在指针或是引用这些概念出来之前,数组就能用来实现链表的功能。这里所说的链表指的就是用指针或对象的引用来设计的链表。<o:p></o:p>

在实际的应用开发中,数组由于它天生的种种特性(参考Java容器分析数组》),更多的会被开发人员所想到用到,但所有的数据结构都有它特定的适用场合。众所周知,数组和链表最大的区别在于,使用数组能够快速访问数组中的每个元素,而使用链表可以方便的操纵每个数据项。下面通过两个很有趣的例子说明了它们各自的区别与优势。<o:p></o:p>

虽然在JDKJava提供了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>

分享到:
评论

相关推荐

    数据结构与算法复习(Java):排序、字符串、数组、链表、二分查找、二叉树.zip

    例如,数组的连续存储,链表的动态分配节点,树和图的邻接矩阵或邻接表表示等。 基本操作:针对每种数据结构,定义了一系列基本的操作,包括但不限于插入、删除、查找、更新、遍历等,并分析这些操作的时间复杂度和...

    蓝桥杯(Python)相关知识点记录,包含基础知识点,数据结构等算法实现,真题练习

    链表:理解链表的基本结构和操作,如插入、删除节点等。 栈与队列:掌握栈(后进先出)和队列(先进先出)的基本特性及操作。 树与图:如二叉树、哈夫曼树等的基本结构和遍历方法。 排序与查找:如冒泡排序、快速...

    ACM的基本教程.txt

    数组、链表、栈、队列等基本数据结构的实现与操作。 掌握基本的排序算法(如冒泡排序、快速排序、归并排序等)和查找算法(如二分查找、哈希查找)。 理解并掌握一些经典的算法设计策略,如分治、动态规划、贪心...

    Java 或大数据开发者找工作必备材料

    数据结构是算法设计的核心,通过学习数组、链表、树等结构,可以提高编程效率,优化算法性能,是解决复杂问题的技术前提。 Java作为一种流行的编程语言,以其跨平台和面向对象的特性广泛应用于企业级应用开发。掌握...

    AIC的Java课程1-6章

    第10章 基本数据结构 4课时  了解和比较静态分配内存空间和动态分配内存空间,能够选择数组或链表表示线性结构。  掌握通过引用同类型对象(指针)实现链表,动态分配内存空间构建链表。 ...

    数据结构--数据结构的组织方法.pdf

    常见的数据结构:栈、队列、数组、链表、树、图、字典树(⾼效树形结构)、散列表(哈希表) Java常⽤数据结构(图解): 图⽚源⾃于: 1、栈和队列: 2、栈(stack):先进后出,删除与加⼊均在栈顶操作 栈也称为...

    数据结构与常见算法,从递归开始,排序,至链表,队列,栈,树,图等。.zip

    例如,数组的连续存储,链表的动态分配节点,树和图的邻接矩阵或邻接表表示等。 基本操作:针对每种数据结构,定义了一系列基本的操作,包括但不限于插入、删除、查找、更新、遍历等,并分析这些操作的时间复杂度和...

    计算机二级C的出题范围.doc

    此外,还需理解C语言的特性,如动态内存分配、文件操作、预处理器、多文件编程、函数指针、回调函数、指针与数组、指针与字符串、结构体与指针、链表、栈、队列、递归等。 在编程实践方面,考生需要具备常见算法...

    谭浩强C语言程序设计,C++程序设计,严蔚敏数据结构,高一凡数据结构算法分析与实现.rar

    他善于用容易理解的方法和语言说明复杂的概念。许多人认为他开创了计算机书籍贴近大众的新风,为我国的计算机普及事业做出了重要的贡献。 谭浩强教授曾获全国高校教学成果国家级奖、国家科技进步奖,以及北京市政府...

    谭浩强C语言程序设计,C++程序设计,严蔚敏数据结构,高一凡数据结构算法分析与实现.rar )

    他善于用容易理解的方法和语言说明复杂的概念。许多人认为他开创了计算机书籍贴近大众的新风,为我国的计算机普及事业做出了重要的贡献。 谭浩强教授曾获全国高校教学成果国家级奖、国家科技进步奖,以及北京市政府...

    数据结构与基本算法和LeetCode.zip

    例如,数组的连续存储,链表的动态分配节点,树和图的邻接矩阵或邻接表表示等。 基本操作:针对每种数据结构,定义了一系列基本的操作,包括但不限于插入、删除、查找、更新、遍历等,并分析这些操作的时间复杂度和...

    计算机软件水平考试软件设计师考试大纲与培训指南(2009版)

    (3) 掌握计算机体系结构以及各主要部件的性能和基本工作原理; (4) 掌握操作系统、程序设计语言的基础知识,了解编译程序的基本知识; (5) 熟练掌握常用数据结构和常用算法; (6) 熟悉数据库、网络和多媒体的基础...

    Javaj基本数据结构和算法.zip

    例如,数组的连续存储,链表的动态分配节点,树和图的邻接矩阵或邻接表表示等。 基本操作:针对每种数据结构,定义了一系列基本的操作,包括但不限于插入、删除、查找、更新、遍历等,并分析这些操作的时间复杂度和...

    leetcode算法题主函数如何写-Structrue:结构

    leetcode算法题主函数如何写 数据结构 1、如何高效学习数据结构与算法 一、数据结构的存储方式 ...而且对于解决散列冲突的方法,拉链法需要链表特性,操作简单,但需要额外的空间存储指针;线性探查法就需要数

    现代C++编程:从基础到实战项目全覆盖.docx

    基础篇:介绍C++的基本语法、控制结构、函数、数组和指针等基础知识。 面向对象编程篇:详细讲解类和对象的定义、继承、多态和封装等面向对象的核心概念。 高级特性篇:深入探讨模板编程、标准模板库(STL)的使用,...

    数据结构基本算法实现.zip

    例如,数组的连续存储,链表的动态分配节点,树和图的邻接矩阵或邻接表表示等。 基本操作:针对每种数据结构,定义了一系列基本的操作,包括但不限于插入、删除、查找、更新、遍历等,并分析这些操作的时间复杂度和...

    基本算法与数据结构的Java实现.zip

    例如,数组的连续存储,链表的动态分配节点,树和图的邻接矩阵或邻接表表示等。 基本操作:针对每种数据结构,定义了一系列基本的操作,包括但不限于插入、删除、查找、更新、遍历等,并分析这些操作的时间复杂度和...

    深入理解java虚拟机:jvm高级特性与最佳实践源码-Study:学习

    深入理解java虚拟机:jvm高级特性与最佳实践源码 安卓面试题 Android 面试问题 - 您的 Android 面试备忘单 我们将在我们的 . 由拥有众多 Android 开发人员面试经验和顶级公司面试经验的人员编写和维护。 内容 数据...

    集合anylist要进行筛选.pdf

    集合就如同数组,用来存储和管理一组特定类型的数据对象,除了基本的数据处理功能,集合直接提供了各种数据结构及算法的实现,如队列、链表、排序等,可以让你轻易地完成复杂的数据操作。在使用数组和集合时要先...

Global site tag (gtag.js) - Google Analytics