/*
* 初始版本java实现顺序链表
* 未考虑线程安全问题
*
* and open the template in the editor.
*/
import java.util.Arrays;
/**
*
* @author wyman
*/
public class SequenceList<T> implements ListI<T> {
int size = 0;//实际长度
int init_listSize = 100;//初始长度
public Object[] objs;//用来保存数据
public SequenceList(int n) {
this.objs = new Object[n];
this.init_listSize = n;
}
public SequenceList() {
this.objs = new Object[10];
this.init_listSize = 10;
}
//初始化一个顺序表(对应严蔚敏版数据结构用)over
@Override
public ListI initList() {
return new SequenceList<T>(init_listSize);
}
//over
@Override
public void clearList() {
this.size = 0;
}
//over 链表是否为空
@Override
public boolean listEmpty() {
if (this.size == 0) {
return true;
}
return false;
}
//返回compare的位序,不存在返回0
@Override
public int locateElem(T t) {
int index = 0;
for (int i = 0; i < this.objs.length; i++) {
if (this.objs[i].equals(t)) {
index = i+1;
}
}
return index;
}
//
@Override
public T getElem(int i) {
if (i >= 1 || i <= this.size) {
this.size--;
return (T) objs[i-1];
}
new Exception("查询越界").printStackTrace();
return null;
}
@Override
public T priorElem(T t) {
int index = 0;
if (this.size <= 0) {
return null;
}
for (int i = 0; i < this.objs.length; i++) {
if (this.objs[i].equals(t)) {
index = i;
}
}
return (T) this.objs[--index];
}
@Override
public T nextrElem(T t) {
int index = 0;
if (this.size <= 0) {
return null;
}
for (int i = 0; i < this.objs.length; i++) {
if (this.objs[i].equals(t)) {
index = i + 1;
}
}
if (this.size >= index) {
return null;
}
return (T) this.objs[--index];
}
@Override
public boolean listInsert(int i, T t) {
if (i < 1 || i > size + 1) {
return false;
}
if (size == init_listSize) {
//空间满了分配新空间1.5倍
init_listSize = size + (size >> 1);
Object[] new_Arr = Arrays.copyOf(this.objs, size);
this.objs = new_Arr;
}
Object old_element = this.objs[i - 1];
for (int a = i - 1; a < size; a++) {
this.objs[a + 1] = this.objs[a];
}
this.objs[i - 1] = t;
size++;
return true;
}
@Override
public T listDelete(int i) {
if (i < 1 || i > size) {
return null;
}
for (int a = i; a < size; a++) {
this.objs[a - 1] = this.objs[a];
}
size--;
return null;
}
@Override
public void listTraverse() {
}
@Override
public int getSize() {
return this.size;
}
@Override
public void DestoryList(ListI l) {
l=null;
}
}