一.上机内容
1、实现顺序存储结构下线性表的基本操作,数据类型自己确定。
2、输入一组数据,建立带头结点的单链表,实现线性表的基本操作,线性表中数据元素的类型自己确定。
3、试写一算法,实现顺序表的就地逆置,即利用原表的存储空间将线性表(a1,a2…,an)逆置为(an,an-1…,a1)。
4、已知有序表中的元素以值递增有序排列,并以单链表作存储结构。试写一高效的算法,删除表中所有值大于mink且小于 maxk的元素(若表中存在这样的元素)同时释放被删结点空间,并分析你所写的算法的时间复杂度(注意mink和maxk是给定的两个参变量,它们的值可以和表中的元素相同,也可以不同)。
5、删除单链表中重复的元素,即留下单链表中值不相同的结点,并输出删除后单链表中的所有元素。
6*、某百货公司仓库中有一批电视机,试按价格从高到底的次序建立一个循环链表,每个结点有价格)数量和链指针三个域。现新到m台价格为h的电视机,修改原链表并输出修改后链表的所有内容。
7*、在理解一元多项式的加法算法基础上,编程实现一元多项式的减法。
二.代码实现
1.实现顺序存储结构下线性表的基本操作,数据类型自己确定
public class SqList<T> implements Ilist<T>{
// 属性
T[] array;
int length;
// 构造方法
public SqList(int capacity) {
this.array = (T[]) new Object[capacity];
this.length = 0;
}
/**
* 将顺序表置空
*/
@Override
public void clear() {
this.length = 0;
}
/**
* 判断顺序表是否为空
* @return
*/
@Override
public boolean isEmpty() {
return this.length==0;
}
/**
* 返回顺序表的长度
* @return
*/
@Override
public int getLength() {
return this.length;
}
/**
* 得到第i个元素
* @param i
* @return
*/
@Override
public T get(int i) throws Exception{
if (i<0 || i>=this.length){
throw new Exception("第 " + i +" 元素不存在");
}
return this.array[i];
}
/**
* 在末尾插入元素
* @param t
*/
public void insert(T t) throws Exception {
insert(this.length,t);
}
/**
* 插入元素
* @param i
* @param t
*/
@Override
public void insert(int i, T t) throws Exception {
// 这个length不是线性表的length,而是底层数组的length,因为不能超过底层数组的长度
if (i == this.array.length){
throw new Exception("长度已满,无法插入");
}
if (i<0 || i > this.length){
throw new Exception("插入位置不合法,无法插入");
}
// 能运行到这,表示能够进行插入
// 第i个元素及其后面的元素都要往后移动一位
for (int j = this.length; j > i ; j--) {
// 后一位等于前一位
this.array[j] = this.array[j-1];
}