package NodeList;
public class ListStructs {
final int MAXSIZE = 20; //存储空间分配量
Object data[]; //数组存储的数据元素,最大值为MAXSIZE
static int length; //顺序表长度
/**
* 初始化线性表
* @return 线性表长度
*/
public void InitList()
{
data = new Object[MAXSIZE];
length = 0;
}
/**
* 判断线性表是否为空
* @return 0为空,1为非空
*/
public int ListEmpty()
{
if(length != 0){
return 1;
}
return 0;
}
/**
* 把数组中的数据清空
* @return 0为清空
*/
public int ClearList()
{
int size = length;
while(size!=0){
data[size-1] = null;
size--;
}
return 0;
}
/**
* 将线性表中第i个位置元素值返回
* @param i 第i个位置
* @return e 第i个位置元素的值
*/
public Object GetElem(int i)
{
Object e = data[i-1];
return e;
}
/**
* 在线性表中查找与给定值e相等的元素
* @param e 给定值
* @return 如果查找成功则返回对应的序号,0代表失败
*/
public int LocateElem(Object e)
{
for(int i=0; i<data.length-1; i++)
{
if(e==data[i]){
return i+1;
}
}
return 0;
}
/**
* 在线性表中第i个位置之前插入新的数据元素e
* @param i 位置
* @param e 元素
* @return 1代表成功,0代表失败
*/
public int ListInsert(int i, Object e)
{
if(i == MAXSIZE)
{
return 0;
}
if(i<1 || i>length+1)
{
return 0;
}
if(i<=length)
{
for(int k=length-1; k>=i-1; k--)
{
data[k+1] = data[k];
}
}
data[i-1] = e;
length++;
return 1;
}
/**
* 删除线性表中第i个位置的元素,并返回删除的元素
* @param i 位置
* @return e 删除的元素
*/
public Object ListDelete(int i)
{
Object e = null;
if(i == MAXSIZE)
{
return 0;
}
if(i<1 || i>length+1)
{
return 0;
}
if(i<data.length)
{
e = data[i-1];
for (int k=i; k<length; k++)
{
data[k-1] = data[k];
}
}
data[length-1] = null;
length--;
return e;
}
/**
* 返回线性表中元素的个数
* @return
*/
public int ListLength()
{
return length;
}
/**
* 测试
* @param args
*/
public static void main(String[] args)
{
ListStructs ls = new ListStructs();
ls.InitList(); //初始化
//填入值
ls.ListInsert(1, "1");
ls.ListInsert(2, "2");
ls.ListInsert(3, "3");
ls.ListInsert(4, "4");
ls.ListInsert(5, "5");
ls.ListInsert(6, "6");
ls.ListInsert(7, "7");
ls.ListInsert(8, "8");
if(ls.ListEmpty() == 1){
System.out.println("线性表不为空:");
}else{
System.out.println("线性表为空:");
}
//打印
for(int i = 1; i<=length; i++)
{
System.out.println(i+":"+ls.GetElem(i));
}
//删除值
ls.ListDelete(4);
//打印
for(int i = 1; i<=length; i++)
{
System.out.println(i+":"+ls.GetElem(i));
}
//查询值为5的元素位置
System.out.println("值为\"5\"的元素在线性表位置为:"+ls.LocateElem("5"));
//线性表长度
System.out.println("线性表长度为:"+ls.ListLength());
}
}