线性表接口LList:
package com.clarck.datastructure.linked;
/**
* 线性表接口LList,描述线性表抽象数据类型,泛型参数T表示数据元素的数据类型
*
* @author clarck
*
*/
public interface LList<T> {
/**
* 判断线性表是否空
* @return
*/
boolean isEmpty();
/**
* 返回线性表长度
* @return
*/
int length();
/**
* 返回第i(i≥0)个元素
* @param i
* @return
*/
T get(int i);
/**
* 设置第i个元素值为x
* @param i
* @param x
*/
void set(int i, T x);
/**
* 插入x作为第i个元素
* @param i
* @param x
*/
void insert(int i, T x);
/**
* 在线性表最后插入x元素
* @param x
*/
void append(T x);
/**
* 删除第i个元素并返回被删除对象
* @param i
* @return
*/
T remove(int i);
/**
* 删除线性表所有元素
*/
void removeAll();
/**
* 查找,返回首次出现的关键字为key元素
* @param key
* @return
*/
T search(T key);
}
单链表结点类:
package com.clarck.datastructure.linked;
/**
* 单链表结点类,T指定结点的元素类型
*
* @author clarck
*
* @param <T>
*/
public class Node<T> {
/**
* 数据域,保存数据元素
*/
public T data;
/**
* 地址域,引用后继结点
*/
public Node<T> next;
/**
* 构造结点,data指定数据元素,next指定后继结点
*
* @param data
* @param next
*/
public Node(T data, Node<T> next) {
this.data = data;
this.next = next;
}
/**
* 构造节点
*/
public Node() {
this(null, null);
}
/**
* 返回结点元素值对应的字符串
*/
@Override
public String toString() {
return this.data.toString();
}
/**
* 比较两个结点值是否相等,覆盖Object类的equals(obj)方法
*/
@SuppressWarnings("unchecked")
@Override
public boolean equals(Object obj) {
return obj == this || obj instanceof Node && this.data.equals(((Node<T>)obj).data);
}
}
线性表的链式表示和实现: