顺序线性表的设计与实现
一、目的和要求:
(1)正确定义线性表接口;
(2)掌握线性表基本操作实现方法;
(3)能正确分析算法的时间复杂度;
(3)采用顺序线性表或链式线性表解决实际问题。
二、实验原理及内容:
(1)线性表的接口定义;
(2)顺序线性表的定义及基本操作;
(3)使用顺序线性表解决合并两个有序顺序线性表;
(4)使用链式线性表的解决约瑟夫环问题
三、实验步骤:(二选一)
1、顺序线性的定义、基本操作及解决实际问题
(1)顺序线性表的定义;
(2)顺序线性表的基本操作;
(3)合并两个有序顺序线性表
2、链式线性表的定义、基本操作及解决实际问题(自由完成)
(1)链式线性表的定义;
(2)链式线性表的基本操作;
(3)使用链式线性表解决约瑟夫环问题
四、实验过程
1、工程结构如下图所示:
2、线性表接口定义:ILinarList.java
package com.linearlist;
/**
* 接口
* 线性表的基本操作(添加、删除、修改、查询、清空、判断是否为空,求长度)
* 泛型,E代表元素类型
* @authorhhhlh
* Title:线性表接口
* Description:线性表的所有方法声明,E表示泛型,即任意类型,基本操作
* 基本操作有:添加、插入、删除、定位、查询、修改、求长度、清空、判断是否为空
*
*/
public interface ILinarList<E>{
boolean add(E item); //在线性表末尾添加一个元素
boolean insert(int index,E item);//在线性表第index位置插入元素
E remove(int index); //删除线性表第index位置的元素
int indexOf(E item); //查询元素E所在的位置,如果不存在,返回位置为0
E get(int index); //获得index位置的元素
E set(int index,E item); //替换index位置元素为E
int size(); //获得线性表的长度,即元素个数
void clear(); //清空线性表,即删除所有的元素
boolean isEmpty(); //判断线性表是否为空
}
3、顺序线性表的定义及基本操作实现:SeqList.java
import java.lang.reflect.Array;
/*
* 顺序线性表的定义及基本操作
* 顺序线性表采用数组实现
* 顺序线性表的属性有:数组,数组空间大小,元素个数
*/
public class SeqList<E> implements ILinarList<E> {
// 属性
private int maxsize; // 数组空间大小
private E[] data;// 数组,存放元素
private int size; // 数组元素个数
// get和set方法
public int getMaxsize() {
return maxsize;
}
public void setMaxsize(int maxsize) {
this.maxsize = maxsize;
}
public E[] getData() {
return data;
}
public void setData(E[] data) {
this.data = data;
}
public int getSize() {
return size;
}
public void setSize(int size) {
this.size = size;
}
// 构造方法
@SuppressWarnings("unchecked")
public SeqList(Class<E> type,int maxsize){
this.maxsize = maxsize;
this.data = (E[]) Array.newInstance(type, maxsize);
size = 0;
}
// 针对顺序线性表特意添加判断已满方法、下标是否合法方法、输出所有元素方法
/**
* 判断是否已满,满则返回true,否则返回false
*/
public boolean isFull() {
if (this.size == this.maxsize)
return true;
else
return false;
}
/**
* 判断位置是否超界,在此下标从0开始,但位置我们规定从1开始
*
* @param index即位置,从1开始计算
*/
public boolean