JAVA教程之Java言语中链表和双向链表的完成
windows系统样,他们做了什么事或者留了一些后门程序,谁都不知道,二,java开发是跨平台,任何系统上都可以运行,对于保密型系统和大型系统开发这是必要的链表是一种主要的数据布局,在程序计划中占据很主要的位置。C言语和C++言语中是用指针来完成链表布局的,因为Java言语不供应指针,以是有人以为在Java言语中不克不及完成链表,实在否则,Java言语比C和C++更简单完成链表布局。Java言语中的对象援用实践上是一个指针(本文中的指针均为观点上的意义,而非言语供应的数据范例),以是我们能够编写如许的类来完成链表中的结点。
classNode
{
Objectdata;
Nodenext;//指向下一个结点
}
将数据域界说成Object类是由于Object类是狭义超类,任何类对象都能够给其赋值,增添了代码的通用性。为了使链表能够被会见还必要界说一个表头,表头必需包括指向第一个结点的指针和指向以后结点的指针。为了便于在链表尾部增添结点,还能够增添一指向链表尾部的指针,别的还能够用一个域来暗示链表的巨细,当挪用者想失掉链表的巨细时,不用遍历全部链表。下图是这类链表的表示图:
链表的数据布局
我们能够用类List来完成链表布局,用变量Head、Tail、Length、Pointer来完成表头。存储以后结点的指针时有必定的技能,Pointer并不是存储指向以后结点的指针,而是存储指向它的前趋结点的指针,当其值为null时暗示以后结点是第一个结点。那末为何要如许做呢?这是由于当删除以后结点后仍需包管剩下的结点组成链表,假如Pointer指向以后结点,则会给操纵带来很年夜坚苦。那末怎样失掉以后结点呢,我们界说了一个办法cursor(),前往值是指向以后结点的指针。类List还界说了一些办法来完成对链表的基础操纵,经由过程使用这些基础操纵我们能够对链表举行各类操纵。比方reset()办法使第一个结点成为以后结点。insert(Objectd)办法在以后结点前拔出一个结点,并使其成为以后结点。remove()办法删除以后结点同时前往其内容,并使厥后继结点成为以后结点,假如删除的是最初一个结点,则第一个结点变成以后结点。
链表类List的源代码以下:
importjava.io.*;
publicclassList
{
/*用变量来完成表头*/
privateNodeHead=null;
privateNodeTail=null;
privateNodePointer=null;
privateintLength=0;
publicvoiddeleteAll()
/*清空全部链表*/
{
Head=null;
Tail=null;
Pointer=null;
Length=0;
}
publicvoidreset()
/*链表复位,使第一个结点
成为以后结点*/
{
Pointer=null;
}
publicbooleanisEmpty()
/*判别链表是不是为空*/
{
return(Length==0);
}
publicbooleanisEnd()
/*判别以后结点是不是
为最初一个结点*/
{
if(Length==0)
thrownewjava.lang.NullPointerException();
elseif(Length==1)
returntrue;
else
return(cursor()==Tail);
}
publicObjectnextNode()
/*前往以后结点的下一个结点的值,
并使其成为以后结点*/
{
if(Length==1)
thrownewjava.util.NoSuchElementException();
elseif(Length==0)
thrownewjava.lang.NullPointerException();
else
{
Nodetemp=cursor();
Pointer=temp;
if(temp!=Tail)
return(temp.next.data);
else
thrownewjava.util.NoSuchElementException();
}
}
publicObjectcurrentNode()
/*前往以后结点的值*/
{
Nodetemp=cursor();
returntemp.data;
}
publicvoidinsert(Objectd)
/*在以后结点前拔出一个结点,
并使其成为以后结点*/
{
Nodee=newNode(d);
if(Length==0)
{
Tail=e;
Head=e;
}
else
{
Nodetemp=cursor();
e.next=temp;
if(Pointer==null)
Head=e;
else
Pointer.next=e;
}
Length++;
}
publicintsize()
/*前往链表的巨细*/
{
return(Length);
}
publicObjectremove()
/*将以后结点移出链表,下一个结点成为以后结点,假如移出的结点是最初一个结点,则第一个结点成为以后结点*/
{
Objecttemp;
if(Length==0)
thrownewjava.util.NoSuchElementException();
elseif(Length==1)
{
temp=Head.data;
deleteAll();
}
else
{
Nodecur=cursor();
temp=cur.data;
if(cur==Head)
Head=cur.next;
elseif(cur==Tail)
{
Pointer.next=null;
Tail=Pointer;
reset();
}
else
Pointer.next=cur.next;
Length--;
}
returntemp;
}
privateNodecursor()
/*前往以后结点的指针*/
{
if(Head==null)
thrownewjava.lang.NullPointerException();
elseif(Pointer==null)
returnHead;
else
returnPointer.next;
}
publicstaticvoidmain(String[]args)
/*链表的复杂使用举例*/
{
Lista=newList();
for(inti=1;i<=10;i++)
a.insert(newInteger(i));
System.out.println(a.currentNode());
while(!a.isEnd())
System.out.println(a.nextNode());
a.reset();
while(!a.isEnd())
{
a.remove();
}
a.remove();
a.reset();
if(a.isEmpty())
System.out.println("ThereisnoNodeinList
");
System.in.println("Youcanpressreturntoquit
");
try
{
System.in.read();
//确保用户看清程序运转了局
}
catch(IOExceptione)
{}
}
}
classNode
/*组成链表的结点界说*/
{
Objectdata;
Nodenext;
Node(Objectd)
{
data=d;
next=null;
}
}
读者还能够依据实践必要界说新的办法来对链表举行操纵。双向链表能够用相似的办法完成只是结点的类增添了一个指向前趋结点的指针。
能够用如许的代码来完成:
classNode
{
Objectdata;
Nodenext;
Nodeprevious;
Node(Objectd)
{
data=d;
next=null;
previous=null;
}
}
固然,双向链表基础操纵的完成略有分歧。链表和双向链表的完成办法,也能够用在仓库和行列的完成中,这里就不再多写了,有乐趣的读者能够将List类的代码略加修改便可。
在ruby里才是一切皆对象。当然我不并不是很了解ruby,但是ruby确实是将语法简化得很好。 还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。 任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言 Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。 Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。 科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。 Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。 是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能 当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢? 是一种使用者不需花费很多时间学习的语言 是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能 是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言 任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言 还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。 Java自面世后就非常流行,发展迅速,对C++语言形成了有力冲击。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于个人PC、数据中心、游戏控制台 Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。 是一种为 Internet发展的计算机语言 设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧 Pet Store.(宠物店)是SUN公司为了演示其J2EE编程规范而推出的开放源码的程序,应该很具有权威性,想学J2EE和EJB的朋友不要 错过了。 我大二,Java也只学了一年,觉得还是看thinking in java好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。
页:
[1]
2