`
timewalker
  • 浏览: 4734 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

Java单链表(个人总结)

阅读更多
   第三篇技术博客  相当的不好意思 还是没培养成写博客的习惯 看了看上一篇的时间3月13 很多感触 晚点另写一篇总结吧……
   这个总结有点相当的过时了 上周就做好了但是一直没细想 现在由于学校课程正在用C实现中 思想相通 姑且把java版本的总结如下
   用链表实现队列,首先思考的就是队列的常见功能:插入,添加,删除,索引查找,遍历打印,长度统计,修改.
   然后就是思考如何用链表表示,链表的结构特点便是前后相连,与数组这些顺序结构相比,链表特点便是所存取的部分在内存中不连续,前一个元素对象指向下一个,这种指向关系,在C中是指针,在Java中便是引用传递,我觉得区别C与java的也就在这里。(C学的很烂,指针始终没弄明白,也没回头看,不过学JAVA时定义结点类时看到在一个结点类中定义下一个结点为属性,忽然一下就有种懂了的感觉,呵呵),所以对队列的操作便是对这些结点的各种操作,改变结点的属性。
   具体实现代码如下;
   首先是必须要定义好结点类滴:
   public class LinkNode {
private Object obj;
private LinkNode next;

public LinkNode(Object obj){//重载构造器,传入数据
this.obj=obj;
}

public Object getObj() {
return obj;
}
public void setObj(Object obj) {
this.obj = obj;
}
public LinkNode getNext() {
return next;
}
public void setNext(LinkNode next) {
this.next = next;
}
}
        四个方法,两个属性。
        然后就可以写队列类的方法了:
        首先定义两个结点:
         private   LinkNode root=null;
private   LinkNode rear=root;
         root是根节点,rear是当前结点
         队列相应的操作方法就如下了:
         //添加元素的方法
          public void add(Object obj){//添加元素
    LinkNode node=new LinkNode(obj);
    if(root==null){
    root=node;
    rear=root;
    }else{
    rear.setNext(node);
    rear=node;
    }
      }
         //删除指定元素
          public void remove(int index){
      int count=0;
      rear=root;
      if(index==0){
  root=root.getNext();
  }
      while(rear!=null&&rear.getNext()!=null){   
      if(count==index-1){
      rear.setNext(rear.getNext().getNext());
      }
      count++;
      rear=rear.getNext();
      }   
      }
        //返回队列长度
       public int size(){
      int count=0;
      if(root==null){
      return 0;
      }else{
      count++;
      rear=root.getNext();
      while(rear!=null){
      count++;
      rear=rear.getNext();            
      }         
      }
      return count;
      }
         //返回指定元素
  public Object get(int index){
    int count=0;
    if(index<0||index>=size()){
    throw new RuntimeException();
    }
    else{
    rear=root;
    while(rear!=null){   
    if(count==index){
    return rear.getObj();
    }
    else{
    count++;
    rear=rear.getNext();
    }   
    }      
    }
    return null;    
      }
      //指定位置插入元素
  //此处是用后插法
      public void insert(int index,Object obj){
      int count=0;
      rear=root;
      LinkNode node=new LinkNode(obj);
      while(rear!=null&&rear.getNext()!=null){
      if(count==index){
   
      node.setNext(rear.getNext());
      rear.setNext(node);
      }
      count++;
      rear=rear.getNext();
      }
      if(rear!=null&&rear.getNext()==null){
      if(count==index){
      rear.setNext(node);
      }
      }           
      }

      //修改指定元素
  public void modify(int index,Object obj){
      int count=0;
      if(index<0||index>=size()){
      throw new RuntimeException();
      }
      else{
      rear=root;
      while(rear!=null){   
      if(count==index){     
          rear.setObj(obj);         
      //    break;
      }     
      count++;
      rear=rear.getNext();         
      }      
      }
      } 
      //打印整个队列
public void printLinkList(){
      rear=root;
       while(rear!=null){
       Object obj=rear.getObj();
          System.out.println(obj);
          rear=rear.getNext();               
        }
      }

       总体感觉,写的这些方法都很类似。都是要沿头结点向后查找,如果索引值与计数的count相等,则执行相应删除,修改或添加操作,重要的便是如何调用结点类的四个方法,尤其是后两个setNext()和getNext(),使链表始终保持连接而不中断……
     
       思路是第一位的,明确要实现的功能,再按难易和必要性分块,一步步实现,具体到代码就是分块的执行循环,赋值等基本操作,判断条件的选定,整体模块的调用,呵呵 这是最近写代码的感受  。
     还是要交流才能进步的快,写出来,感觉挺舒服,错误欢迎指正,感激不尽………嘿嘿 加油
分享到:
评论

相关推荐

    Java编程删除链表中重复的节点问题解决思路及源码分享

    个人感觉这题关键是注意指针的指向,可以定义一个first对象(值为-1,主要用于返回操作后的链表),first.next指向head,定义一个last同样指向first(主要用于操作记录要删除节点的前一个节点),定义一个p指向head...

    JAVA程序员面试技巧

    对于JAVA程序员来说,面试不仅是进入心仪公司的门槛,更是展示自身技术实力和个人魅力的重要环节。然而,许多求职者在面对面试时常常感到无所适从,缺乏有效的准备策略。本文旨在通过对《JAVA程序员面试笔试真题库》...

    约瑟夫问题-基于java+双链表实现的约瑟夫问题题解.zip

    总结起来,约瑟夫问题是一个经典的问题,其Java解决方案利用了双链表数据结构的优势,提供了高效且简洁的代码实现。通过学习这种实现,我们可以提升对链表操作、循环和条件判断等编程概念的理解,同时也可以锻炼解决...

    Introduction to Java Programming and Data Structures, Comprehensive Version (Y. Daniel Liang) (Z-Library).pdf

    ### Java编程与数据结构简介 #### 一、书籍概述 《Java编程与数据结构简介》是...总之,《Java编程与数据结构简介》是一本内容丰富、讲解详尽的专业教材,无论是对于个人学习还是课堂教学都是非常有价值的参考资料。

    数据结构(Java版) 线性表的实现与应用完整版.doc

    本实验主要探讨了线性表在Java环境下的两种实现方式:顺序表和单链表,并通过实现一系列基本操作来加深理解。 1. **顺序表**: 顺序表是线性表的一种静态存储方式,它将所有元素存储在一块连续的内存区域中。在Java...

    2011海南省java版本入门.docx

    根据给定文件的部分内容,我们可以总结出以下几个关键的Java编程知识点: ### 1. 对一个 n×n 矩阵进行排序 #### 目标 编写一个程序,使得一个 n×n 的矩阵按照每行元素的平均值进行递增排序。 #### 实现思路 1. ...

    模拟通讯录-数据结构(顺序表实现基本功能).doc

    该任务要求设计一个模拟通讯录,它是一个数据结构的实现,用于存储个人联系信息,如姓名、电话、邮箱等。通讯录需要支持四种基本操作:插入新联系人、删除现有联系人、更新联系人信息以及查找特定联系人。这些功能都...

    学生信息管理系统---链表实现

    链表分为单链表、双链表和循环链表等多种形式,这里我们主要讨论单链表,因为它在实现学生信息管理系统时最为常见。 在学生信息管理系统中,我们可以创建一个节点类,包含学生的个人信息字段和一个指向下一个节点的...

    管理系统——通讯录

    管理系统——通讯录是一种用于存储和管理个人信息的工具,尤其在IT行业中,通讯录通常被设计成数据结构的形式,便于高效地进行查找、删除和排序等操作。在这个案例中,使用了链表作为基础数据结构来实现这个功能。...

    数据结构线性表的实现与应用完整版 (2).docx

    总结来说,这个实验报告详细介绍了顺序表和单链表这两种线性表的实现方式,并通过具体的应用场景——约瑟夫环问题和排序单链表,展示了它们在实际问题中的运用。同时,实验也强调了编写程序和理解数据结构特点的重要...

    LeetCodeSolutionsInJava:LeetCode问题的解决方案

    总结来说,"LeetCodeSolutionsInJava"项目不仅提供了LeetCode问题的Java解决方案,更是一个学习和实践Java编程、算法和数据结构的宝贵资源。通过研究这些解决方案,开发者可以深入理解Java语言特性,熟练掌握常见...

    2021-2022计算机二级等级考试试题及答案No.1001.docx

    根据提供的文件信息,我们可以归纳总结出一系列与计算机二级等级考试相关的知识点。这些知识点涉及数据库管理、网络基础、算法与数据结构、编程语言基础、办公软件使用等多方面内容。 ### 数据库管理 1. **修改...

    百度、京东、搜狗、小米,中兴、迈瑞、绿盟、思特沃克等公司软件测试工程师的面经

    以上是对各家公司软件测试工程师面试经验的总结,涵盖了技术面试和HR面试的主要知识点。通过这些经验分享,可以帮助求职者更好地准备面试,提高成功率。同时,也可以作为参考,了解当前市场上软件测试工程师岗位的...

    数据结构课程设计报告(含有源程序)

    7. **源程序分析**:报告中附带的源程序可能包括上述数据结构的C++或Java实现,每个数据结构的插入、删除、查找等操作的代码会被详细解析,帮助理解其实现机制。 8. **性能分析**:对每种数据结构的操作进行时间...

    leetcode题库-leetcode:leetcode

    LeetCode的题库覆盖了多种编程语言,如Java、Python、C++等,题目类型多样,包括但不限于数组、链表、字符串、栈、队列、二叉树、图、哈希表、回溯、动态规划等。这些题目不仅能够帮助程序员巩固基础,还能挑战高级...

    leetcode答案-leetcode_answer:leetcode

    例如,在“leetcode_answer-master”目录下,每个子文件或子文件夹对应一个LeetCode的题目,里面包含不同语言(如Python、Java、C++等)的解决方案。这种结构便于开发者根据需求快速定位到特定题目,对比不同实现,...

    OwnAlgorithmNotes

    "OwnAlgorithmNotes"是一份个人精心整理的算法学习资料,旨在帮助读者深入理解并掌握各种算法,提高解决实际问题的能力。这份笔记不仅包含了作者在刷题过程中的心得体验,还提供了详细的解题策略和思路,为读者提供...

    编程新手真言绝对实用

    1. **何谓PC**:个人计算机(Personal Computer)是基于微处理器的计算机系统,用户可以直接与其交互。 2. **图灵机与冯氏架构**:图灵机是理论计算机科学中的理想化模型,而冯·诺依曼架构则是现代计算机硬件的...

Global site tag (gtag.js) - Google Analytics