顺序链表的实现
转载http://www.cnblogs.com/lixiaolun/p/4643664.html
public class SequenceList {
private int LIST_INIT_SIZE = 5;//链表的原始大小
private int INCREMENT = 1;//链表的增量
private Object []SqList = null;//链表
private int curIndex = 0;//当前位置
//初始化链表
public void initList(){
SqList = new Object[LIST_INIT_SIZE];//初始化SqList对象数组
}
//尾插法 向链表中插入元素
public void insertList(Object o){
if ( curIndex > LIST_INIT_SIZE-1 ) {//判断当前链表是否已经满
//重新为链表分配空间
System.out.println("重新分配空间");
LIST_INIT_SIZE += INCREMENT;//链表长度增加
Object []temp = new Object[LIST_INIT_SIZE];//声明并定义一个临时对象数组
for(int i = 0 ; i < curIndex ; i++){
temp[i] = SqList[i];//将SqList对象数组中的每一个对象都赋值给temp临时对象数组
}
SqList = null ;//将其置为空
SqList = temp ;//将temp的地址赋值给SqList
}
/*链表中如果不让其包含重复元素,则加入这段代码
* if(isContain(o)){
System.out.println("链表中已经含有"+o);
}else{
SqList[curIndex++] = o ;
}*/
SqList[curIndex++] = o ;//将对象o存入SqList对象数组中,当前位置curIndex的值加一
}
//判断是否有重复元素
Boolean isContain(Object o){
for(int i=0;i<curIndex;i++){
if(SqList[i].equals(o)){
return true;
}
}
return false;
}
//删除链表中的元素
public void delete(Object o){
for(int i=0;i<curIndex;i++){
if(SqList[i].equals(o)){
for(int j=i;j<curIndex-1;j++){
SqList[j]=SqList[j+1];
}
curIndex--;
continue;
}
if(i==curIndex-1){
System.out.println("不存在此元素");
}
}
}
//获取链表中的某个元素
public Object getElement(int i){
if(i<=0 || i>curIndex){
System.out.println("获取位置不在当前列表的范围:1~"+curIndex);
}
return SqList[i-1];
}
//打印链表
public void print(){
for(int i = 0 ; i < curIndex ; i++){
System.out.print(SqList[i]+"\t");
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
SequenceList sqList = new SequenceList();
sqList.initList();
sqList.insertList(1);
sqList.insertList(2);
sqList.insertList(3);
sqList.insertList(4);
sqList.insertList(5);
sqList.insertList(6);
sqList.insertList(7);
System.out.println(sqList.curIndex);
sqList.print();
System.out.println();
sqList.delete(8);
System.out.println("该链表的第3个元素是"+sqList.getElement(3));;
}
}