基于数组对线性表的实现

顺序表的实现是用固定长度的数组来存储表中的元素。

package ArrayBasedList;

/*顺序表:基于数组实线性表*/
public class ArrayBasedList implements List{

	private static final int defaultSize = 10;			//长度缺省值
	
	private int maxOfList;								//线性表的最大长度
	private int numOfList;								//线性表的实际长度
	private int current;								//当前的对象的位置
	private Object[] listArray;							//储存线性表元素的数组
	
	ArrayBasedList(){									//无参数初始化
		setUp(defaultSize);
	}
	
	ArrayBasedList(int sz){								//自定义最大常数长度的初始化
		setUp(sz);
	}
	
	private void setUp(int size){						//参数的初始化
		maxOfList = size;
		numOfList = current = 0;
		listArray = new Object[size];
	}
	
	public void clear(){								//从当前线性表中移除所有对象
		numOfList = current = 0;						//简单地将值初始化
	}
	
	public void insert(Object item){					//在当前位置插入对象
		assert numOfList < maxOfList :  "列表已满.";	//断言判断
		assert (current >= 0) && (current <= numOfList): "错误的当前位置.";
		for(int i=numOfList; i>current; i--){			//对象转移腾出空间
			listArray[i] = listArray[i-1];
		}
		listArray[current] = item;
		numOfList++;
	}
	
	public void append(Object item){					//从列表结尾增加对象
		assert numOfList < maxOfList: "列表已满.";
		listArray[numOfList++] = item;
	}
	
	public Object remove(){								//移除并返回当前对象
		assert (!isEmpty()) : "无法删除一个空列表.";
		assert (isInList()) : "没有当前元素";		
		Object item = listArray[current];
		for(int i = current; i < numOfList-1; i++){
			listArray[i] = listArray[i+1];
		}
		numOfList--;
		return item;
	}
	
	public void removeAll(){							//移除所有元素
		numOfList = current = 0;
	}
	
	public void setFirst(){								//设置当前位置为第一个位置
		current = 0;
	}
	
	public void previous(){								//设置当前位置移动到上一位置
		current--;
	}
	
	public void next(){									//设置当前位置移动到下一位置
		current++;
	}
	
	public int length(){								//返回当前列表的长度
		return numOfList;
	}
	
	public void setPosition(int pos){					//设置当前位置为pos
		current = pos;
	}
	
	public void setValue(Object val){					//设置当前位置对象的值
		assert isInList() : "没有当前元素.";
		listArray[current] = val;
	}
	
	public Object currentValue(){						//返回当前对象的值
		assert isInList() : "没有当前元素.";
		return listArray[current];
	}
	
	public boolean isEmpty(){							//如果当前线性表为空,返回真
		return numOfList == 0;
	}
	
	public boolean isInList(){							//如果当前位置确实指向表中的一个位置,则返回真
		return (current >= 0)&&(current < numOfList);
	}
	
	public void print(){								//输出当前线性表的所有元素
		if(isEmpty()){
			System.out.println("()");
		}else{
			System.out.print("(");
			for(setFirst(); isInList(); next()){
				System.out.print(currentValue()+ " ");
			}
			System.out.println(")");
		}
	}
}//class ArrayBasedList


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值