线性表的数组实现
2011-05-04 12:29
183 查看
分别实现3种类型的链表,这一篇用数组来实现线性表---
有序链表:链表元素或节点始终保持有序,链表元素为Comparable对象,主要体现在插入操作要插入在相应的序列位置
无序链表:无序,每次指定插入在哪(表头,尾,or指定元素之后)
索引链表:提供了许多与索引相关的操作
将三种实现的都有的公共操作定义在一个接口ADT中,对应于各自特征所特有的操作扩展在自己的类中,可以看到,其实就是插入操作(add)不同而已。
以上说明具体见下列ADT定义中的注释:
链表ADT:
ArrayIndexedList
数组实现的很多地方都在移动元素,在插入和删除上没有优势,它的优势在于随机存取。
有序链表:链表元素或节点始终保持有序,链表元素为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; }
数组实现的很多地方都在移动元素,在插入和删除上没有优势,它的优势在于随机存取。
相关文章推荐
- 线性表顺序存储(数组)及其15种操作的实现
- 【数据结构之线性表顺序存储】简单的数组的方式实现
- 线性表之数组实现
- 用线性时间复杂度实现找出数组中出现一次的元素
- 线性表数组实现
- java数据结构——Hash的实现(数组) 线性探测的方法解决冲突
- 线性表的数组实现方式
- 用线性时间复杂度实现找出数组中出现一次的元素
- c语言的线性表的顺序存储的实现,数组
- 数据结构之线性表(数组实现)
- 算法导论 4.1-5 最大子数组问题 线性时间算法 C++简单实现
- C++语言实现线性表之数组实例
- 基于数组对线性表的实现
- 用线性时间复杂度实现找出数组中出现一次的元素
- 线性表的基本操作(数组实现)
- 算法导论4.1-3~4.1-5最大子数组暴力算法和递归算法的实现和线性时间算法实现
- java(数组实现)线性表中顺序表
- 基于数组的顺序线性表的实现
- 线性表—使用数组实现
- 线性表之数组实现