数据结构和算法是程序的灵魂,基本的数据结构分为:线性结构、树、图。线性结构又分为顺序实现的线性结构和链式实现的线性结构。顺序实现的线性结构是一种随机存取结构,适合遍历,寻找元素;而不适合插入和删除操作。其get()、set()的时间复杂度为O(1),而插入和删除的时间复杂度为O(N)。使用java语言实现顺序存储的线性结构代码如下:
线性表的抽象数据类型
package dataStructtion.linear;
/**
* 线性表的抽象数据类型
* @author xiucai
* @param <T>
*/
public interface LList<T> {
/**
* 判断是否为空
* @return
*/
public boolean isEmpty();
/**
* 返回线性表长度
* @return
*/
public int length();
/**
* 返回下标为i的元素(i>=0)
* @param i
* @return
*/
public T get(int i);
/**
* 设置下标为i的元素值为t
* @param i
* @param t
*/
public void set(int i,T t);
/**
* 在下标为i的位置插入元素t
* @param i
* @param t
*/
public void insert(int i,T t);
/**
* 在线性表末尾追加元素t
* @param t
*/
public void append(T t);
/**
* 移除下标为i的元素
* @param i
* @return
*/
public T remove(int i);
/**
* 移除线性表所有元素
*/
public void removeAll();
/**
* 查找,返回首次出现的关键字为key的元素
* @param t
* @return
*/
public T search(T t);
/**
* 判断线性表是否包含元素t
* @param t
* @return
*/
public boolean contain(T t);
}
顺序存储的线性表的实现:
package dataStructtion.linear;
/**
* 线性表的顺序表示和实现
* @author xiucai
* @param <T>
*/
public class SeqList<T> implements LList<T>{
private Object[] element;//对象数组
private int len;//顺序表长度,记录元素个数
/**
* 构造方法,初始化为size长度
* @param size
*/
public SeqList(int size){
this.element=new Object[size];
this.len=0;
}
/**
* 默认构造长度为64的数组
*/
public SeqList(){
this(64);
}
/**
* 重写toString方法,用于输出
*/
@Override
public String toString(){
String string="";
if(this.len==0)
return string;
for(int i=0;i<this.len;i++)
string+=element[i].toString()+" ";
return string;
}
/**
* 重写equals方法,用于比较
*/
@Override
public boolean equals(Object obj) {
// TODO Auto-generated method stub
boolean flag=true;
if(this==obj)
return flag;
if(obj instanceof SeqList){
SeqList<T> t=(SeqList<T>)obj;
if(this.len==t.len){
for(int i=0;i<this.len;i++){
if(this.element[i]!=t.element[i]){
flag=false;
}
}
}else
return false;
}else
return false;
return flag;
}
/**
* 判断线性表是否为空
*/
@Override
public boolean isEmpty() {
// TODO Auto-generated method stub
return this.len==0;
}
/**
* 线性表的长度
*/
@Override
public int length() {
// TODO Auto-generated method stub
return this.len;
}
/**
* 获取下标为i的元素
*/
@Override
public T get(int i) {
// TODO Auto-generated method stub
if(i>=0&&i<this.len)
return (T)element[i];
else throw new IndexOutOfBoundsException(i+",下标越界");
}
/**
* 设置小标为i的元素为t
*/
@Override
public void set(int i, T t) {
// TODO Auto-generated method stub
if(t==null) return;
if(i>=0&&i<this.len)
this.element[i]=t;
else throw new IndexOutOfBoundsException(i+",下标越界");
}
/**
* 在下标为i的位置设置元素t,其他元素依次后移
*/
@Override
public void insert(int i, T t) {
// TODO Auto-generated method stub
if(t==null) return ;
if(this.len==element.length){
Object[] temp=this.element;
this.element=new Object[temp.length*2];
for(int j=0;j<temp.length;j++){
element[i]=temp[i];
}
}
i=i<0?0:i>this.len?len:i;
for(int j=this.len-1;j>=i;j--)
this.element[j+1]=this.element[j];
this.element[i]=t;
this.len++;
}
/**
* 线性表末尾追加元素t
*/
@Override
public void append(T t) {
// TODO Auto-generated method stub
insert(this.len, t);
}
/**
* 移除下表为i的元素,剩下元素依次前移
*/
@Override
public T remove(int i) {
// TODO Auto-generated method stub
if(i<0||i>this.len-1)
return null;
T t=(T)this.element[i];
for(int j=i;j<this.len;j++)
this.element[j]=this.element[j+1];
this.element[this.len-1]=null;
this.len--;
return t;
}
/**
* 清空线性表
*/
@Override
public void removeAll() {
// TODO Auto-generated method stub
for(int i=0;i<this.len;i++)
this.element[i]=null;
this.len=0;
}
/**
* 搜索key为t的元素
*/
@Override
public T search(T t) {
// TODO Auto-generated method stub
if(t==null)
return null;
for(int i=0;i<this.len;i++){
if(element[i].equals(t))
return (T)element[i];
}
return null;
}
/**
* 判断线性表是否包含元素t
*/
@Override
public boolean contain(T t) {
// TODO Auto-generated method stub
return this.search(t)!=null;
}
}
测试类:
package dataStructtion.linear;
/**
* 此类进行测试
* @author xiucai
*
*/
public class SeqTest {
public static void main(String[] args) {
SeqList<String> seqList=new SeqList<String>();
System.out.println(seqList.isEmpty());
System.out.println(seqList.length());
seqList.insert(0, "aaa");
System.out.println(seqList);
seqList.insert(1,"bbb");
System.out.println(seqList);
seqList.insert(0,"ccc");
System.out.println(seqList);
System.out.println(seqList.length());
// System.out.println(seqList.get(4));
seqList.set(0, "ddd");
System.out.println(seqList);
seqList.remove(0);
System.out.println(seqList);
seqList.append("ccc");
System.out.println(seqList);
System.out.println(seqList.contain("aaa"));
System.out.println(seqList.search("bbb"));
seqList.removeAll();
System.out.println(seqList);
}
}