您的位置:首页 > 其它

线性表的数组实现

2011-05-04 12:29 183 查看
分别实现3种类型的链表,这一篇用数组来实现线性表---

有序链表:链表元素或节点始终保持有序,链表元素为Comparable对象,主要体现在插入操作要插入在相应的序列位置

无序链表:无序,每次指定插入在哪(表头,尾,or指定元素之后)

索引链表:提供了许多与索引相关的操作

将三种实现的都有的公共操作定义在一个接口ADT中,对应于各自特征所特有的操作扩展在自己的类中,可以看到,其实就是插入操作(add)不同而已。

以上说明具体见下列ADT定义中的注释:

链表ADT:

ArrayIndexedList

//索引链表扩展的操作

public void add(Object element){//在表尾插入
if(rear == contents.length)
expand();
contents[rear] = element;
rear++;
}

public void add(int index,Object element){//在指定索引上插入,后面的元素要后移
if(rear == contents.length)
expand();
for(int i = rear;i > index;i--)
contents[i] = contents[i-1];
contents[index] = element;
rear++;
}

public void set(int index,Object element){//设置某个索引上的元素(覆盖原来的,不需要移动元素)
if(index >= rear)
{
System.out.println("只能在表的范围内设置");
return;
}
contents[index] = element;
}

public Object get(int index){//返回某个索引上的元素
return contents[index];
}

public int indexOf(Object element){//返回某个元素的索引
for(int i = 0;i < rear;i++)
if(element.equals(contents[i]))
{
int index = i;
return index;
}
return -1;
}

public Object remove(int index){//移除指定索引上的元素
for(int i = index;i < rear;i++)
{
Object result = contents[index];
contents[index] = contents[index+1];
rear--;
return result;
}
return null;
}


数组实现的很多地方都在移动元素,在插入和删除上没有优势,它的优势在于随机存取。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: