您的位置:首页 > 理论基础 > 数据结构算法

java数据结构之链表

2008-04-22 14:08 591 查看
近日复习数据结构,以前都是用c写的程序,现在用java来将其重新实现,希望大家批评指正:

1.节点说明:


package pku.ss.datastructure.LinkedList;






public class ListNode ...{




ListNode(Object theElement) ...{


this(theElement, null);


}






ListNode(Object theElement, ListNode n) ...{


element = theElement;


next = n;


}




Object element; //节点中的元素


ListNode next; //指向下一个节点


}

2,枚举器类


package pku.ss.datastructure.LinkedList;




/** *//**


* 是一个枚举器(iterator)类,它提供了用于读取元素的方法 LinkedListItr存储


* 对ListNode对象的一个引用,它代表枚举器 的位置


*


* @author Jacken


*/




public class LinkedListItr ...{




LinkedListItr(ListNode theNode) ...{


current = theNode;


}




/** *//**


* 判断当前节点是否是最后一个节点


* @return true or false


*/




public boolean isPastEnd() ...{


return current == null;


}




/** *//**


* 返回当前节点的元素值


* @return 当前节点的元素值


*/




public Object retrieve() ...{


return isPastEnd() ? null : current.element;


}




/** *//**


* 将当前节点往后推后一个节点


*/




public void advance() ...{


if (!isPastEnd())


current = current.next;


}




ListNode current;


}



3,链表类


package pku.ss.datastructure.LinkedList;






public class LinkedList ...{




public LinkedList() ...{


header = new ListNode(null);


}




/** *//**


* 判断链表是否为空


* @return true or false


*/




public boolean isEmpty() ...{


return header.next == null;


}




/** *//**


* 将链表置空


*/




public void makeEmpty() ...{


header.next = null;


}




/** *//**


* 返回头节点的枚举器


* @return 头节点枚举器


*/




public LinkedListItr zeroth() ...{


return new LinkedListItr(header);


}




/** *//**


* 返回第一个节点的枚举器


* @return 第一个节点的枚举器


*/




public LinkedListItr first() ...{


return new LinkedListItr(header.next);


}




/** *//**


* 查找指定元素


* @param x


* @return 所查找元素的枚举器


*/




public LinkedListItr find(Object x) ...{


ListNode itr = header.next;


while (itr.next != null && !itr.element.equals(x))


itr = itr.next;


return new LinkedListItr(itr);


}




/** *//**


* 删除指定元素


* @param x


*/




public void remove(Object x) ...{


LinkedListItr p = findPrevious(x);


if (p.current.next != null)


p.current.next = p.current.next.next;


}




/** *//**


* 查找指定元素的头一个节点


* @param x


* @return 指定元素的头一个节点的枚举器


*/




public LinkedListItr findPrevious(Object x) ...{


ListNode itr = header;




while (itr.next != null && !itr.next.element.equals(x))


itr = itr.next;


return new LinkedListItr(itr);


}




/** *//**


* 在P几点后面插入一个节点,节点的元素值为x


* @param x


* @param p


*/




public void insert(Object x, LinkedListItr p) ...{


if (p != null && p.current != null)


p.current.next = new ListNode(x, p.current.next);


}




/** *//**


* 打印指定链表


* @param theList


*/




public static void printList(LinkedList theList) ...{




if (theList.isEmpty()) ...{


System.out.println("Empty List");




} else ...{


LinkedListItr itr = theList.first();


for (; !itr.isPastEnd(); itr.advance())


System.out.println(itr.retrieve() + " ");


}


}




private ListNode header;


}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: