JAVA 实现线性表之链表

来源:互联网 发布:阴阳师6星土豪酒吞数据 编辑:程序博客网 时间:2024/06/05 19:59

JAVA 实现线性表之链表

今天用一天的时间才敲完一个链表,还有很多漏洞,先贴出来供大家参考。
定义接口:
package com.guobing.link;public interface LinkI {public void Insert(Object T);public void Insert(Object T, int i) throws Exception;public void DeleteAll();public boolean IsEmpty();public boolean IsEnd();}

实现接口:
package com.guobing.linkImpl;import com.guobing.link.LinkI;public class LinkList implements LinkI{/** * 对一个单链表本身来说,应该有这么几个信息 * 头结点、头指针、尾指针 头指针指向头结点 * 如果线性表为空表, 则头结点的指针域为空 * 所以应该在LinkList中定义这几个变量 */private Node head=null;//首结点private Node tail=null;//尾结点//private Node HeadPointer=null;//头指针   带头结点的链表才有头指针private int size;@Overridepublic void DeleteAll() {head = null;tail = null;}/** * 初始化 创建头指针 */public void init(Object T) {Node node = new Node(T);head = node;if(tail == null)tail = head;size++;}/** * 在指定的位置插入元素     这里有些问题, 不能在首指针处添加 后面有专门的方法实现 * 当然可以改,但我随便一下》》》 */@Overridepublic void Insert(Object T, int i) throws Exception {if(i<0||i>size+1) {//+1是为了可以在尾指针处添加throw new Exception("你输入的数字不合法,请检查");}if(i>size){InsertAtTail(T);//尾指针处插入} else {Node node = new Node(T);//创建要插入结点的信息Node p = head;int j = 1;while(p.next != null && j<i-1) {p = p.next;j++;}node.next = p.next;p.next = node;}size ++;}/** * 在首节点处插入   效率很高 * @param T */public void InsertAtHead(Object T) {Node p = new Node(T);p.next = head;head = p;}/** * 在尾结点插入数据   效率很高 * @param T */public void InsertAtTail(Object T) {if(!IsEmpty()) {tail.next = new Node(T);tail = tail.next;size ++;}}/** * 删除首结点    效率很高 */public void DeleteAtHead() {if(!IsEmpty()) {head = head.next;}}/** * 删除尾结点  效率很低 */public void DeleteAtTail() {if(!IsEmpty()) {Node p = head;while(p.next != null) {p = p.next;}tail = p;tail.next = null;}}@Overridepublic boolean IsEmpty() {return (this.head == null);}@Overridepublic boolean IsEnd() {// TODO Auto-generated method stubreturn (this.tail == null);}@Overridepublic void Insert(Object T) {//这个方法忽略// TODO Auto-generated method stub}/** * 得到指定位置元素的值 * @param i */public void getElem(int i) {Node p = head;int j = 0;while(p.next != null && j<i) {p = p.next;j ++;}System.out.println("Elem[" + i + "]" + "的值是:" + p.date);}/** * 打印出链表中的数据 */public void print() {Node current = head;while(current !=null) {System.out.print(current.date + " ");current = current.next;}}public static void main(String [] args) throws Exception {LinkList list = new LinkList();list.init("a");list.InsertAtTail("b");list.InsertAtTail("c");list.InsertAtTail("d");list.InsertAtTail("e");list.Insert("aaa", 3);System.out.println(list.size);list.print();list.getElem(0);list.getElem(3);}}



0 0