博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《Java数据结构和算法》单链表
阅读量:6514 次
发布时间:2019-06-24

本文共 3487 字,大约阅读时间需要 11 分钟。

hot3.png

1、链结点

链表中。每个数据项都被包含在链结点中(Link),即Node,每个链结点Link都包含一个data和一个对下一个链结点的引用

class Link{    public int iData;    public douvle dData;    public Link next;//reference to next data}

这种类定义有时叫“自引用”式,因为它包含了一个和自己类型相同的字段next. 一个真正的程序中data部分可能包含更多的数据类型,通常用一个包含这些数据类的对象来代替这些数据项。

class Link{    public inventoryItem iT;//object holding data       public Link next;}

2、关于“引用

类型为Link的next字段仅仅是对另外一个对象的“引用”,而不是一个对象。

一个引用是一个对某个对象的参照数值,是一个计算机内存中对象地址,不需要知道它的具体值,只需要把它当成一个奇妙的数,它会告诉你对象在哪里。

对象与对象的引用:

 A a1 = new A();

A是一个类,new A()是对象,a1是对象的引用并不是对象。

A a2 = new A(); a1 = a2;//"="是一个传地址的过程,将a2指向的对象的地址传给a1,使a1指向a2对象的地址。

3、简单数据类型(int/double..)的存储与对象的存储。

double salary = 95663.00;

它在内存中创建了一个空间,并把数字95663.00放进去。

Link aLink = someLink; //someLink和aLink都指向Link类型的对象。

它把对Link对象的引用,叫做someLink,放到变量aLink中。而someLink对象本身是在其他地方的,通过这个语句,它没有移动,更不会被创建,它必须在此之前就已经被创建:

Link someLink = new Link();

someLink字段也没有真正拥有一个对象,它仍然是一个引用。

4、数组与链表

数组中,每个数据项占用一个特定的位置,通过下标去访问,而在链表中寻找一个特定元素的唯一方法就是沿着这个元素的链一直向下寻找,直到找到。

5、LinkList类

只包含一个数据项,即对链表第一个链结点的引用first.

  class LinkList {  private Link first;    public LinkList(){   first = null;  }    public boolean isEmpty(){   return(first==null);  }  }

6、单链表

包含链结点Link和LinkList类

package Structure;class Link{ public int iData; public double dData; public Link next;public Link(int id,double dd){ iData = id; dData = dd;}public void displayLink(){ System.out.print("{"+iData+","+dData+"}");}}//end class Link(node)  class LinkList {  private Link first;    public LinkList(){   first = null;  }    public boolean isEmpty(){   return(first==null);  }    public void insertFirst(int id,double dd){   Link newLink = new Link(id,dd);   newLink.next = first;   first = newLink;  }    public Link deleteFirst(){   Link temp = first;   first = first.next;   return temp;  }    public Link find(int key){   Link current = first;   while(current.iData!=key){    if(current.next==null)     return null;    else     current = current.next;   }   return current;  }    /*搜索要删除的链结点,它需要掌握的不仅是指向当前链结点(current)的引用,还有   * 指向当前结点的前一个链结点(previous),因为当删除一个结点时必须把前一个结点和   * 后一个结点连在一起*/   public Link delete(int key){   Link current = first;   Link previous = first;   while(current.iData!=key){    if(current.next==null)     return null;    else{     previous = current;     current = current.next;    }   }   if(current==first)    first = first.next;   else    previous.next = current.next;   return current;  }  public void displayList(){   System.out.print("List(first-->last):");   Link current = first;   while(current!=null){    current.displayLink();    current = current.next;   }   System.out.println("");  }}//end class LinkListpublic class LinkListD{  public static void main(String[] args){  LinkList theList = new LinkList();    theList.insertFirst(22, 20.1);  theList.insertFirst(12, 120.1);  theList.insertFirst(202, 210.1);  theList.insertFirst(232, 240.1);  theList.insertFirst(242, 220.1);  theList.insertFirst(212, 270.1);    theList.displayList();    Link f = theList.find(212);  if(f!=null)   System.out.println("found link with key "+f.iData);  else   System.out.println("Can't find link");    Link d = theList.delete(232);  if(d!=null)   System.out.println("Deleted link with key "+d.iData);  else   System.out.println("Can't delete link");  theList.displayList();    while(!theList.isEmpty()){   Link aLink = theList.deleteFirst();   System.out.print("the deleted:");   aLink.displayLink();   System.out.println("");  }  theList.displayList(); }}

111156_5jZA_2653987.jpg

转载于:https://my.oschina.net/doudoulee/blog/643582

你可能感兴趣的文章
Android View体系(六)从源码解析Activity的构成
查看>>
详解ASP.NET Core Docker部署
查看>>
fnmatch源码阅读
查看>>
U9249 【模板】BSGS
查看>>
单片机小白学步系列(九) 用万用焊板搭建实验电路
查看>>
Tomcat PK Resin
查看>>
(转)全文检索技术学习(三)——Lucene支持中文分词
查看>>
Node.js+Koa开发微信公众号个人笔记(一)准备工作
查看>>
Android 图片缓存处理
查看>>
阿里盒马领域驱动设计实践
查看>>
vuex 存值 及 取值 的操作
查看>>
HDU 2242 考研路茫茫——空调教室(边双连通)
查看>>
如何在C#项目中使用NHibernate
查看>>
安装python包到指定虚拟环境
查看>>
力扣(LeetCode)21
查看>>
网页视频流m3u8/ts视频下载
查看>>
Python 基础起步 (十) 什么叫函数?
查看>>
8年软件测试工程师感悟——写给还在迷茫中的朋友
查看>>
5G一周热闻:华为夺联通5G大单,首张5G电话卡发放
查看>>
“迁移策略+新容器运行时”应对有状态应用的冷热迁移挑战
查看>>