链表是一种重要的数据结构,在程序设计中占有很重要的地位。c语言和c++语言中是用指针来实现链表结构的,由于java语言不提供指针,所以有人认为在java语言中不能实现链表,其实不然,java语言比c和c++更容易实现链表结构。java语言中的对象引用实际上是一个指针(本文中的指针均为概念上的意义,而非语言提供的数据类型),所以我们可以编写这样的类来实现链表中的结点。
| class node { object data; node next;//指向下一个结点 } |
| import java.io.*; public class list { /*用变量来实现表头*/ private node head=null; private node tail=null; private node pointer=null; private int length=0; public void deleteall() /*清空整个链表*/ { head=null; tail=null; pointer=null; length=0; } public void reset() /*链表复位,使第一个结点成为当前结点*/ { pointer=null; } public boolean isempty() /*判断链表是否为空*/ { return(length==0); } public boolean isend() /*判断当前结点是否为最后一个结点*/ { if(length==0) throw new java.lang.nullpointerexception(); else if(length==1) return true; else return(cursor()==tail); } public object nextnode() /*返回当前结点的下一个结点的值,并使其成为当前结点*/ { if(length==1) throw new java.util.nosuchelementexception(); else if(length==0) throw new java.lang.nullpointerexception(); else { node temp=cursor(); pointer=temp; if(temp!=tail) return(temp.next.data); else throw new java.util.nosuchelementexception(); } } public object currentnode() /*返回当前结点的值*/ { node temp=cursor(); return temp.data; } public void insert(object d) /*在当前结点前插入一个结点,并使其成为当前结点*/ { node e=new node(d); if(length==0) { tail=e; head=e; } else { node temp=cursor(); e.next=temp; if(pointer==null) head=e; else pointer.next=e; } length++; } public int size() /*返回链表的大小*/ { return (length); } public object remove() /*将当前结点移出链表,下一个结点成为当前结点,如果移出的结点是最后一个结点,则第一个结点成为当前结点*/ { object temp; if(length==0) throw new java.util.nosuchelementexception(); else if(length==1) { temp=head.data; deleteall(); } else { node cur=cursor(); temp=cur.data; if(cur==head) head=cur.next; else if(cur==tail) { pointer.next=null; tail=pointer; reset(); } else pointer.next=cur.next; length--; } return temp; } private node cursor() /*返回当前结点的指针*/ { if(head==null) throw new java.lang.nullpointerexception(); else if(pointer==null) return head; else return pointer.next; } public static void main(string[] args) /*链表的简单应用举例*/ { list a=new list (); for(int i=1;i<=10;i++) a.insert(new integer(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("there is no node in list \n"); system.in.println("you can press return to quit\n"); try { system.in.read(); //确保用户看清程序运行结果 } catch(ioexception e) {} } } class node /*构成链表的结点定义*/ { object data; node next; node(object d) { data=d; next=null; } } |
| class node { object data; node next; node previous; node(object d) { data=d; next=null; previous=null; } } |
Java Asp PHP .Net XML C/C++ CGI VB Jsp J2ee J2se J2me EJB Servlet Tomcat Resin Struts Weblogic Eclipse ANT GUI JMS Web servise IDEA Webphere Hibernate Spring Jboss Applet Swing Socket Javamail Perl Ajax P2P 安全 模式 框架 测试 开源 游戏
Windows XP Windows 2000 Windows 2003 Windows Me Windows 9.x Linux UNIX 注册表 操作系统 服务器 应用服务器