实验一 顺序表基本操作的实现
一、实验目的
- 掌握线性表的顺序存贮结构及基本操作,深入了解顺序表的基本特性,以便在实际问题背景下灵活运用它们。
- 巩固该存贮结构的构造方法,深入理解和灵活掌握顺序表的插入、删除等操作。
二、实验环境
⒈ 硬件:每个学生需配备计算机一台。操作系统: Windows;
⒉ 软件: Windows操作系统+Myeplips;
三、实验要求及实验内容
⒈设计一个顺序表类,要求:类成员函数包括插入、删除、取数据元素、求数据个数、是否空
实现程序:
public class SqListClass<E> {//顺序表泛型类
final int initcapacity = 20;//顺序表初始的容量
public E[] data;//存放顺序表中的元素
public int size;//存放顺序表的长度
private int capacity;//存放顺序表的容量
public SqListClass(){//构造方法,实现data和length的初始化
data = (E[]) new Object[initcapacity];//强转为E类型数组
capacity = initcapacity;
size = 0;//线性表的基本运算算法
}
//建立顺序表
public void add(E e){
data [size]=e;
size ++;
}
//删除算法
public void Delete (int i) throws IllegalAccessException {
if (i<0 || i>size-1){
throw new IllegalAccessException("删陈:位i不在有效范围");
}
for (int j = i; j <size-1 ; j++) {
data[i]= data [j+1];
size--;
}
}
//查找算法
public E GetElem(int i){
if(i<0 || i>size-1){
throw new IllegalArgumentException("查找:位首不在有效范园");
}
return(E) data[i];
}
public int size(){
return size;
}
public boolean NULL(){
if (size == 0){
return true;
}
return false;
}
}
⒉设计一个测试主函数验证类成员函数的正确性。
实现程序:
public static void main(String[] args) throws IllegalAccessException {
SqListClass<Integer> a = new SqListClass<Integer>();
for (int i = 0; i <20 ; i++) {
a.add(i);
}
for (int i = 0; i <20 ; i++) {
System.out.print(" "+a.GetElem(i));
}
System.out.println();
a.Delete(6);
for (int i = 0; i < a.size; i++) {
System.out.print(" "+a.GetElem(i));
}
System.out.println();
System.out.println("顺序表的元素个数是"+a.size);
System.out.println("顺序表是否为空"+a.NULL());
}
运行结果:
测试
通过!
四、思考题
- 删除顺序表中自第i个元素起连续k个元素
实现程序:
public class Delete<E> {
final int initcapacity = 20;//顺序表初始的容量
public E[] data;//存放顺序表中的元素
public int size;//存放顺序表的长度
private int capacity;//存放顺序表的容量
public Delete(){//构造方法,实现data和length的初始化
data = (E[]) new Object[initcapacity];//强转为E类型数组
capacity = initcapacity;
size = 0;//线性表的基本运算算法
}
//建立顺序表
public void add(E e){
data [size]=e;
size ++;
}
//查找算法
public E GetElem(int i){
if(i<0 || i>size-1){
throw new IllegalArgumentException("查找:位首不在有效范园");
}
return(E) data[i];
}
//删除算法
public void delete (int i,int a) throws IllegalAccessException {
if (i<0 || i>size-1){
throw new IllegalAccessException("删陈:位i不在有效范围");
}
for (int j = i+a; j <size-1 ; j++) {
data[j-a]= data [j];
size--;
}
}
public static void main(String[] args) throws IOException, IllegalAccessException {
Delete<Integer> d = new Delete<>();
for (int i = 0; i <20 ; i++) {
d.add(i);
}
System.out.println("删除前列表");
for (int i = 0; i <20 ; i++) {
System.out.print(" "+d.GetElem(i));
}
System.out.println();
System.out.println("输入删除开始位置");
Scanner d1 = new Scanner(System.in);
int a = d1.nextInt();
System.out.println("输入删除的数量");
int b = d1.nextInt();
d.delete(a-1,b);
System.out.println("删除后列表");
for (int i = 0; i < d.size; i++) {
System.out.print(" "+d.GetElem(i));
}
}
}
运行结果:
测试
通过!
五、报告要求
- 报告要求用专门的实验报告纸书写,字迹清晰,格式规范。
- 报告中应写清姓名、学号、实验日期、实验题目、实验目的、实验要求。
- 报告中应书写源程序,且源程序中要有注释。
- 报告中应包含运行结果及结果分析。如调试通过,请注明‘通过’并写出输入的数据及运行结果;如未调试通过或结果不正确,试分析原因。
- 报告最后包含实验总结和体会。
六、实验总结
通过本次实验,学习了线性表和线性表的一些基本操作以及了解了顺序表的应用。本次实验是本科目的第一个实现,进行的途中有一些问题,在经历了和室友的讨论和查阅书籍资料最后的到了解决。