import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapters;
/**
* 顺序表
* @author VESON
*
* @param <E>
*/
public class SequeceList<E> {
private static int DEFAULT_SIZE = 16;
private Object[] table; //顺序表数组
private int n; //顺序表中真实的元素个数
private int table_capacity; //顺序表最大容量
/**
* 指定容量创建顺序表
* @param capacity
*/
public SequeceList(int capacity) {
table = new Object[capacity];
n = 0;//table中还没有元素
table_capacity = capacity;
}
/**
* 默认值创建顺序表
*/
public SequeceList() {
this(DEFAULT_SIZE);
n=0;
}
/**
* 判断顺序表是否为空
* @return boolean
*/
public boolean isEmpty() {
return n == 0;
}
/**
* 判断顺序表容量是否已满
*/
public boolean isFull() {
if(n>=table_capacity) {
return true;
}
return false;
}
/**
* 为顺序表增加10容量
* @return boolean
*/
public boolean addCapacity() {
table = new Object[table_capacity+10];
table_capacity += 10;
return true;
}
/**
* 返回顺序表长度
* @param args
*/
public int length() {
return n;
}
/**
* 返回某个值的索引
* @param args
*/
public Object getIndex(E value) {
int i;
for(i=0; i<n; i++) {
if(value == table[i]) break;
}
if(i == n) return null;
else return i;
}
/**
* 返回某个下标所对应的顺序表的值
* @param args
*/
public E getValue(int index) {
if(index>=0 && index<=n) {
return (E)table[index];
}
return null;
}
/**
* 在指定下标处插入某个值,成功返回true,失败返回false
* @param args
*/
public boolean InsertValue(E value, int index) {
if(index>=n || index<0) {
return false;
}
//不能插入null
if(value==null) {
return false;
}
if(this.isFull()) {
System.out.println("顺序表容量已满!");
return false;
}
//index后的元素向后移
for(int i=n-1; i>index; i--) {
table[i+1] = table[i];
}
table[index] = value;
n++;
return true;
}
/**
* 在顺序表最后加入元素
* @param args
*/
public boolean addElement(E element) {
if(this.isFull()) {
System.out.println("顺序表容量已满!");
return false;
}
table[n] = element;
n++;
return true;
}
/**
* 移除index的元素
* @param args
*/
public boolean remove(int index) {
int i;
if(index>n || index<0) {
return false;
}
int copylength = n-index-1;
if(copylength>0)
System.arraycopy(table, index+1, table, index, copylength);
table[n]=null;
this.n--;
return true;
}
/**
* 清空顺序表
* @param args
*/
public boolean clear() {
for(int i=0; i<n; i++) {
table[i] = null;
}
n = 0;
return true;
}
/**
* 返回所有元素的字符串,格式为a,b,c...
* @param args
*/
public String toString() {
String str = "";
for(int i=0; i<this.length(); i++) {
str += table[i].toString();
if(i+1<this.length()) //最后一个元素之后无“ ,”
str += ",";
}
return str;
}
/**
* 打印顺序表的所有元素
*/
public void print() {
for(int i=0; i<n; i++) {
System.out.print(table[i] + " ");
}
System.out.println();
}
/**
* 返回第一个不为空的索引
* @return
*/
public int noNull() {
for(int i=0; i<n; i++) {
if(table[i] != null) return i;
}
return -1;
}
// public static void main(String[] args) {
// SequeceList sl = new SequeceList();
// sl.addElement(2);
// sl.print();
// System.out.println(sl.isEmpty() + " " + sl.noNull());
// }
}
线性表——顺序表
最新推荐文章于 2024-08-13 22:35:40 发布