`
风子柒
  • 浏览: 55574 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

java中的链表(之单链表)

阅读更多
   最近开始学习java的数据结构(确切地说,是用java实现的数据结构),首先,很大的感触是,和C实现链表的思想是相通的啊。数据结构本来就一样嘛。
  
   闲话少扯,直奔主题!
   先说链表吧,链表不同于以前我们学过的队列或数组,它是非线性的,即不是在内存中连续存储的。链表可以理解成由很多结点组成,很多人会把链表比喻为自行车的链条,窃以为,这样比喻是欠妥的,因为链条是连续的(哈哈哈哈,这个牛角尖钻的),或许可以将其理解为你手机里存的亲友手机号码,我们可以通过这个号码和那个人取得联系。我们一般将链表的一个结点分成两个部分:Data filed和Pointer field(这些是作者沿用C里的叫法),数据域用来存储数据,后面的指针域用来存放下一个结点的地址。
   结点的定义如下:
public class Node {

// local declaration
private Object obj;
private Node next;

// getters and setters
public Object getObj() {
return obj;
}
public void setObj(Object obj) {
this.obj = obj;
}
public Node getNext() {
return next;
}
public void setNext(Node next) {
this.next = next;
}

} // end class Node
   这段代码很清晰的表明了结点的组成内容。

   我的队列之链表实现版实现了以下几个功能:创建、增加、删除、插入、修改、打印、取指定位置的值以及取队列的大小。
   先选取其中的几个阐述一下,希望大家指正!
  1.删除:先上代码
// delete an item from list
public void del(int index){

     // counters
     int count = 0;

     // delete item
     if(index < 0 || index >= size()){
        throw new RuntimeException("Out of index:" + index);
     }else{
         if(index == 0){
    root = null;
}else{
    Node node = root.getNext();
    while(node != null){
count ++;
if(index == count){
    node.setNext(node.getNext().getNext());
}
node = node.getNext();
    } // end loop while
          } // end if-else
      } // end if-else

} // end method del
   删除的实现的一个难点是如何确认到达指定的index位置进行下一步操作。这里是首先定义了一个计数器,用以判断是否到达指定位置,当index==count时,就可以进行删除操作了,删除就是将index-1处得结点的next指向index+1处的结点,java的一个优点是,你不用像C一样人为地用free()函数释放空间,JVM会自动回收。个人强烈建议,在学数据结构时,拿支笔在纸上画画,这样可以将抽象的东西具体化,有利于理解。向链表中增加一个元素就是删除的逆过程了。此处不再赘述。

   2.插入:代码如下
// insert an item to list (follow item NO.index)
public void insert(int index, Object obj){

// counters
int count = 0;

if(index < 0 || index >= size()){
     throw new RuntimeException("Out of index: " + index);
}else{
     // insert
     if(index == 0){
        root.setObj(obj);
     }else{
        // create a new node
        Node insert = new Node();
        insert.setObj(obj);

        // insert it into the list
        Node node = root.getNext();
        while(node != null){
             count ++;
             if(index == count){
                insert.setNext(node.getNext());
                node.setNext(insert);
             }
             node = node.getNext();
        } // end loop while
     } // end if-else

} // end if-else

} // end method insert
   这段代码其实和删除的很像,只是在判断之间先创建一个insert结点并setObj了,而且,有一个很值得注意的地方是:必须先insert.setNext(node.getNext());否则就会出错,大道理上是和程序时自上而下执行是有关的。相信你懂的。
   这两段代码都得先比较index和size()进行比较,这是为了保持代码的健壮性。防止溢出。

   写这个的时候,我就在想,我写的东西很大一种程度上是给未来的自己看的,可以用作复习,可以用来找回忆,所以,总希望以一种轻松和谐的姿态行文。

   既然写了这么多,就继续扯点其他的吧,最近才发现,随着时间的推移,最初那种经常将C和Java搅在一起的局面已经一去不复返了,现在开始学着用Java解决一些以前用C解决的问题,通过这个过程,开始更加了解C和Java,二者的相似点和不同的地方也已经有点眉目了。欣慰啊,最开始同时学习的时候,总是有点担心,但是后来转念一想:C和Java都是计算机语言,没有必要将其完全分开,这才坚持了下来。过程虽然有点痛苦,但是结果还是有点满意。
   现在这个阶段,发现自己的C和java还是属于大菜阶段,但是,我一直固执地以为,只要我坚持了,就没有办不到的事,至少过去20年的经验这样告诉我的。编程的天才都是训练出来的!我是一个不相信天才的人(尽管曾经有人这样叫过我 )。

   最后,以我桌面上的一句话结束这次对话吧:The minute you think of giving up, think of the reason why you held on so long.
5
3
分享到:
评论
3 楼 cs小伙 2011-11-21  
The minute you think of giving up, think of the reason why you held on so long,记下这句话了
2 楼 Technoboy 2011-05-26  
the more you read, the more you gain
1 楼 kowloonchen 2011-05-26  

相关推荐

    java 单链表和双向链表的实现

    本话题主要探讨两种常用的数据结构——单链表和双向链表在Java中的实现,以及相关的操作,如在头部添加节点、在尾部添加节点、遍历、逆置和删除。 首先,我们来理解单链表和双向链表的基本概念。单链表是一种线性...

    Java实现单链表以及单链表的操作.zip

    在Java中,我们可以创建一个名为`Node`的类来表示链表的节点,其中包含一个`data`字段存储数据和一个`next`字段指向下一个节点。例如: ```java public class Node { int data; Node next; public Node(int ...

    java实现自己的单链表、双链表、Map存储

    本主题将深入探讨如何使用Java实现自己的单链表、双链表以及Map存储。 首先,我们来讨论单链表。单链表是一种线性数据结构,其中每个元素(节点)包含两个部分:一个是数据部分,用于存储实际的数据;另一个是引用...

    JAVA单链表操作实验

    在JAVA语言中,单链表是非常重要的数据结构之一,它可以用于实现各种高效的算法,例如排序、搜索等。在实际应用中,单链表可以用于解决许多实际问题,例如数据压缩、数据加密等。 本实验可以帮助我们更好地理解...

    Java算法实例-单链表操作

    在Java编程语言中,链表是一种非常重要的数据结构,它不同于数组,不依赖于内存的连续空间。链表由一系列节点组成,每个节点包含数据和指向下一个节点的引用。在这个"Java算法实例-单链表操作"中,我们将探讨如何在...

    java数据结构之单链表

    本文将深入探讨Java中的单链表,这是一种基本但至关重要的数据结构。 单链表是一种线性数据结构,其中每个元素(称为节点)包含两个部分:数据部分和指针部分。数据部分存储实际的信息,而指针部分则指向链表中的下...

    Java实现单链表的基本操作

    在编程领域,数据结构是构建复杂算法的基础,而链表作为一种...总之,理解和掌握单链表及其基本操作是Java程序员必备的技能之一。通过练习和应用这些知识,可以提升对数据结构的理解,从而更好地设计和优化软件系统。

    java实现单链表

    在这个主题中,我们将深入探讨如何使用Java来实现单链表,特别是关注如何插入元素以及如何构建链表。 单链表由一系列节点组成,每个节点包含两部分:数据元素和指向下一个节点的引用。在Java中,我们可以通过创建一...

    Java算法(链表操作实例)

    本文将深入探讨Java中链表的操作实例,旨在帮助开发者更好地理解和运用链表来解决实际问题。 首先,我们需要理解链表的基本概念。链表不同于数组,它不连续存储元素,每个元素(称为节点)包含数据以及指向下一个...

    Java的循环单链表及其测试程序

    在循环单链表中,最后一个节点的`next`指针会指向链表的第一个节点,形成循环。 2. **链表操作**:主要的操作包括插入节点、删除节点、遍历链表等。由于链表是动态数据结构,因此这些操作通常需要通过迭代或递归...

    java基于链表实现树结构(算法源码)

    * 基于链表实现树结构 */ package dsa; public class TreeLinkedList implements Tree { private Object element;//树根节点 private TreeLinkedList parent, firstChild, nextSibling;//父亲、长子及最大的...

    基于Java实现的单链表基本操作之链表合并.zip

    下面将详细介绍单链表的概念、基本操作以及如何在Java中实现链表合并。 单链表是一种线性数据结构,每个节点包含两部分:数据域,用于存储数据;指针域,用于指向下一个节点。链表不像数组那样在内存中连续存储,...

    基于java的循环单链表

    在Java中实现循环单链表,通常会涉及以下三个主要类: 1. 接口类(LinkedListInterface):定义了链表操作的基本方法。例如,添加元素(add),删除元素(remove),查找元素(search),显示链表(display)等。...

    单链表双向链表java实现

    在单链表中,我们只能向前遍历,因为每个节点只保存了指向其后继节点的引用。这使得插入和删除操作相对简单,但在查找某个特定元素时效率较低,因为它通常需要从头开始遍历。 双向链表与单链表类似,但每个节点除了...

    一个自己用java写的学生单链表的相关问题

    在Java编程中,学生单链表是一种常见的数据结构,用于存储和操作一系列按特定顺序排列的学生数据。这个压缩包中的`studentlinklist.java`文件很可能包含了实现学生单链表的类,以及相关的操作方法。下面将详细介绍...

    基于Java实现的单链表基本操作之链表排.zip

    在这个基于Java实现的单链表基本操作项目中,我们主要关注的是链表的排序。下面将详细讲解单链表的基本概念、Java中如何实现单链表以及如何进行链表排序。 **一、单链表的基本概念** 单链表是由一系列节点组成的...

    JAVA数据结构——单链表的操作.docx

    } } (2)建立链表及操作LinkList.java JAVA数据结构——单链表的操作全文共11页,当前为第1页。package ch02; JAVA数据结构——单链表的操作全文共11页,当前为第1页。 import java.util.Scanner; public class ...

    Java单链表增删改查的实现

    在Java编程语言中,单链表是一种常见的数据结构,它由一系列节点组成,每个节点包含一个数据元素和指向下一个节点的引用。这个数据结构在处理动态数据集合时非常有用,因为它允许快速插入和删除操作。下面我们将详细...

    链表-基于Java的单链表基本操作之链表相交.zip

    链表 链表_基于Java的单链表基本操作之链表相交

    链表-基于Java的单链表基本操作之链表排序.zip

    链表 链表_基于Java的单链表基本操作之链表排序

Global site tag (gtag.js) - Google Analytics