java seqlist_java_实现链表以及链表的测试类
顺序线性表的设计与实现
一、目的和要求:
(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{
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 implements ILinarList {
// 属性
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 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 indexOutofRange(int index) {
if (index >= 1 && index <= size)
return true;
else
return false;
}
// 以下为基本操作
/**
* 在末尾添加元素item如果满了,则不再添加,返回false如果不满,则在末尾添加,并设置元素个数为加1
*
* @param item要在末尾添加的元素
*/
public boolean add(E item) {
if (this.size == this.maxsize)
return false;
else {
this.data[this.size] = item;
this.size++;
return true;
}
}
/**
* 在index位置插入元素item 如果位置超界,则返回false表示插入失败(位置从1开始) 如果元素已满,则返回false表示插入失败
* 否则先将插入位置及后面的元素全部后移 插入新的元素 元素个数增加1 返回true表示插入成功
*
* @param index即位置,从1开始计算
* @param item插入的元素
*/
public boolean insert(int index, E item) {
/// size表示当前位置,
if (index <= 0 || index > this.size + 1 || this.size == this.maxsize)
return false;
for (int i = size + 1; i >= index; i--)
data[i] = data[i - 1];
data[index - 1] = item;
this.size++;
return true;
}
/**
* 删除位置为index的元素 如果位置不合法,则不删除,返回null 否则记录删除元素,然后将后面的元素前移 修改元素个数为减1
*
* @param index删除的位置,从1开始计算
*/
public E remove(int index) {
if (index <= 0 || index > size)
return null;
else {
E old = data[index - 1];
for (int i = index - 1; i < size; i++)
data[i] = data[i + 1];
this.size--;
return old;
}
}
/**
* 查询元素所在的位置(首次出现),位置从1开始计算
*
* @param item要查询的元素
* @return如果为0表示查询失败,否则为元素所在的位置
*/
public int indexOf(E item) {
for (int i = 1; i <= size; i++)
if (data[i - 1].equals(item))
return i;
return 0;
}
/**
* 返回位置为index处的元素,如果位置不合法,返回null
*
* @param index位置,从1开始
* @return如果位置不合法,返回null,否则返回index位置处元素
*/
/**
* 替换位置index处的元素为item,并返回原来的元素,如果位置不合法,返回null
*
* @param index替换的位置
* @param item新元素
* @return原来位置处的元素,如果位置不合法,返回null
*/
public E set(int index, E item) {
if (index <= 0 || index > size)
return null;
E old = data[index - 1];
data[index - 1] = item;
return old;
}
/**
* 获得取元素个数
*
* @return返回的元素个数
*/
public int size() {
return this.size;
}
/**
* 清空线性表,将所有元素置为null
*/
public void clear() {
for (int i = 0; i < size; i++)
data[i] = null;
this.size = 0;
}
/**
* 判断线性表是否为空
*
* @return如果为空,返回true,否则false
*/
public boolean isEmpty() {
if (size > 0)
return false;
else
return true;
}
}
4、测试顺序线性表基本操作实现
(1)测试add()方法
package com.test.chapter02;
import com.linearlist.SeqList;
public class TestSeqList1 {
public static void main(String[] args) {
SeqList seqlist = new SeqList(Integer.class, 3);
printseq(seqlist);
seqlist.add(10);
seqlist.add(20);
seqlist.add(30);
seqlist.add(40);
seqlist.add(50);
printseq(seqlist);
}
private static void printseq(SeqList seqlist) {
if(seqlist.getSize()<1){
System.out.println("没有任何元素");
return;
}
System.out.println("顺序线性表中的元素如下:");
for(int i=1;i<=seqlist.getSize();i++){
Integer e = seqlist.getData()[i-1];
System.out.print(e+" ");
}
System.out.println();
}
}
(2)测试insert()方法
package com.test.chapter02;
import com.linearlist.SeqList;
public class TestSeqList2 {
public static void main(String[] args) {
SeqList seqlist = new SeqList(Integer.class, 10);
seqlist.insert(1,10);
seqlist.insert(3,20);
seqlist.insert(1,30);
seqlist.insert(1,40);
seqlist.insert(4,50);
printseq(seqlist);
}
private static void printseq(SeqList seqlist) {
if(seqlist.getSize()<1){
System.out.println("没有任何元素");
return;
}
System.out.println("顺序线性表中的元素如下:");
for(int i=1;i<=seqlist.getSize();i++){
Integer e = seqlist.getData()[i-1];
System.out.print(e+" ");
}
System.out.println();
}
}
(3)测试remove()方法
package com.test.chapter02;
import com.linearlist.SeqList;
public class TestSeqList3 {
public static void main(String[] args) {
SeqList seqlist = new SeqList(Integer.class, 3);
seqlist.add(10);
seqlist.add(20);
seqlist.add(30);
seqlist.add(40);
seqlist.add(50);
printseq(seqlist);
Integer x = seqlist.remove(1);
if (x !=null)
System.out.println("成功删除元素:" + x);
else
System.out.println("删除失败");
printseq(seqlist);
}
private static void printseq(SeqList seqlist) {
if (seqlist.getSize() < 1) {
System.out.println("没有任何元素");
return;
}
System.out.println("顺序线性表中的元素如下:");
for (int i = 1; i <= seqlist.getSize(); i++) {
Integer e = seqlist.getData()[i - 1];
System.out.print(e +" ");
}
System.out.println();
}
}
(4)测试indexOf()方法
package com.test.chapter02;
import com.linearlist.SeqList;
public class TestSeqList4 {
public static void main(String[] args) {
SeqList seqlist = new SeqList(Integer.class, 10);
seqlist.add(10);
seqlist.add(20);
seqlist.add(10);
seqlist.add(40);
seqlist.add(50);
printseq(seqlist);
Integer x = 10;
int loc = seqlist.indexOf(x);
if(loc==0){
System.out.println("没有查询到元素");
}
else
{
System.out.println(x+"所在的位置为:"+loc);
}
}
private static void printseq(SeqList seqlist) {
if (seqlist.getSize() < 1) {
System.out.println("没有任何元素");
return;
}
System.out.println("顺序线性表中的元素如下:");
for (int i = 1; i <= seqlist.getSize(); i++) {
Integer e = seqlist.getData()[i - 1];
System.out.print(e +" ");
}
System.out.println();
}
}
(5)测试get()方法
package com.test.chapter02;
import com.linearlist.SeqList;
public class TestSeqList5 {
public static void main(String[] args) {
SeqList seqlist = new SeqList(Integer.class, 10);
seqlist.add(10);
seqlist.add(20);
seqlist.add(10);
seqlist.add(40);
seqlist.add(50);
printseq(seqlist);
int loc = 0;
Integer x = seqlist.get(loc);
if(x==null){
System.out.println("位置不合法,获取元素失败");
}
else
{
System.out.println(loc+"位置的元素为:"+x);
}
}
private static void printseq(SeqList seqlist) {
if (seqlist.getSize() < 1) {
System.out.println("没有任何元素");
return;
}
System.out.println("顺序线性表中的元素如下:");
for (int i = 1; i <= seqlist.getSize(); i++) {
Integer e = seqlist.getData()[i - 1];
System.out.print(e +" ");
}
System.out.println();
}
}
(6)测试set()方法
package com.test.chapter02;
import com.linearlist.SeqList;
public class TestSeqList6 {
public static void main(String[] args) {
SeqList seqlist = new SeqList(Integer.class, 10);
seqlist.add(10);
seqlist.add(20);
seqlist.add(10);
seqlist.add(40);
seqlist.add(50);
printseq(seqlist);
// 替换
Integer x = seqlist.set(1, 60);
if (x ==null)
System.out.println("位置不合法,替换失败");
else {
System.out.println("替换成功");
printseq(seqlist);
}
// 求元素个数
int len = seqlist.size();
System.out.println("线性表元素个数为:" + len);
// 判断是否为空
if (seqlist.isEmpty())
System.out.println("线性表为空");
else
System.out.println("线性表不为空");
// 线性表清空
seqlist.clear();
printseq(seqlist);
// 判断是否为空
if (seqlist.isEmpty())
System.out.println("线性表为空");
else
System.out.println("线性表不为空");
}
private static void printseq(SeqList seqlist) {
if (seqlist.getSize() < 1) {
System.out.println("没有任何元素");
return;
}
System.out.println("顺序线性表中的元素如下:");
for (int i = 1; i <= seqlist.getSize(); i++) {
Integer e = seqlist.getData()[i - 1];
System.out.print(e +" ");
}
System.out.println();
}
}
5、合并两个有序顺序线性表
package com.test.chapter02;
import com.linearlist.SeqList;
/*
* 合法两个有序顺序线性表La和Lb到新的有序顺序线性表
*/
public class TestSeqList7 {
public static void main(String[] args) {
SeqList La = new SeqList(Integer.class, 10);
La.add(1);
La.add(5);
La.add(8);
La.add(10);
La.add(20);
printseq(La);
SeqList Lb = new SeqList(Integer.class, 10);
Lb.add(2);
Lb.add(4);
Lb.add(7);
Lb.add(9);
printseq(Lb);
SeqList Lc = new SeqList(Integer.class, La.getSize()+Lb.getSize());
mergeTwoSeqList(La,Lb,Lc);
printseq(Lc);
}
/**
* 合并两个有序顺序线性表
* @param la第一个有序顺序线性表
* @param lb第二个有序顺序线性表
* @param lc第三个有序顺序线性表,即合并后的有序顺序线性表
*/
public static void mergeTwoSeqList(SeqList l1, SeqList l2,SeqListl3) {
int i = 1, j = 1;
while (i <= l1.getSize() && j <= l2.getSize()) {
if (l1.get(i) <= l2.get(j)) {
l3.add(l1.get(i++));
}else{
l3.add(l2.get(j++));
}
}
while(i<=l1.getSize())
{
l3.add(l1.get(i));
i++;
}
while(j<=l2.getSize())
{
l3.add(l2.get(j));
j++;
}
}
}
/**
* 输出线性表所有元素
* @param seqlist要输出的线性表
*/
private static void printseq(SeqList seqlist) {
if (seqlist.getSize() < 1) {
System.out.println("没有任何元素");
return;
}
System.out.println("顺序线性表中的元素如下:");
for (int i = 1; i <= seqlist.getSize(); i++) {
Integer e = seqlist.getData()[i - 1];
System.out.print(e +" ");
}
System.out.println();
}
}
java seqlist_java_实现链表以及链表的测试类相关推荐
- 测试类什么时候初始化
反射五:测试类何时初始化(Java) 代码示例: package reflect;//测试类什么时候会初始化 public class Test06 {static {System.out.print ...
- Java开发中巧妙使用链表来实现模拟栈的入栈出栈操作
2019独角兽企业重金招聘Python工程师标准>>> 在Java开发中经常会碰到需要你用Java链表来实现入栈出栈的模拟操作,下文就这个操作做了一个详细的描述. 栈:后进先出:最后 ...
- Leetcode算法Java全解答--19. 删除链表的倒数第N个节点
Leetcode算法Java全解答–19. 删除链表的倒数第N个节点 文章目录 Leetcode算法Java全解答--19. 删除链表的倒数第N个节点 题目 想法 结果 总结 代码 我的答案 大佬们的 ...
- Java数据结构与算法 day02 链表
文章目录 第三章 链表 单链表介绍和内存布局 单链表创建和遍历的分析实现 添加(创建)过程 遍历过程 代码实现 单链表按顺序插入节点 单链表节点的修改 单链表节点的删除和小结 单链表面试题 新浪面试题 ...
- java数据结构 第4章-链表(双向链表)
文章目录 4.4 双向链表应用实例 4.4.1双向链表的操作分析和实现 1.管理单向链表的缺点分析: 2.分析 双向链表的遍历,添加,修改,删除的操作思路 3.双向链表的代码实现 4.代码运行结果 4 ...
- java简单单向链表_用java简单的实现单链表的基本操作
packagecom.tyxh.link;//节点类 public classNode {protected Node next; //指针域 protected int data;//数据域 pub ...
- 数据结构之链表及其Java实现_数据结构之链表及其Java实现
数据的存储一般分线性存储结构和链式存储结构两种.前者是一种顺序的存储方式,在内存中用一块连续的内存空间存储数据,即逻辑上相连的物理位置相邻,比较常见的就是数组:后者是一种链式存储方式,不保证顺序性,逻 ...
- Java版数据结构之单向链表 新增,有序新增的两种方式,修改和删除(CRUD)
Java版数据结构之单向链表 CRUD Java版数据结构之单向链表 新增,有序新增的两种方式,修改和删除; 留了一个疑问; 我的代码仓库:https://github.com/zhuangbinan ...
- Java版数据结构之单向链表
Java版数据结构之单向链表 我的代码仓库:https://github.com/zhuangbinan/datastructure package club.zhuangbinan.linkedli ...
- JAVA 基本数据结构--数组、链表、ArrayList、Linkedlist、hashmap、hashtab等
概要 线性表是一种线性结构,它是具有相同类型的n(n≥0)个数据元素组成的有限序列.本章先介绍线性表的几个基本组成部分:数组.单向链表.双向链表:随后给出双向链表的C.C++和Java三种语言的实现. ...
最新文章
- 解决启动hadoop时datanode无法启动
- dmp文件查看表空间_innoDb文件
- 一文纵览EMAS 到底内含多少阿里核心技术能力
- Linux学习笔记-Makefile的基本使用
- [转]html控件、html服务器控件和web服务器控件的区别
- 高级着色语言HLSL入门(7)
- 【尚未完成,不建议参考】马氏距离,汉明距离
- JavaWeb之分页代码
- Eclipse及Android环境配置
- 一文看懂抢注域名的相关问题解答
- android 小米申请root权限,小米root权限获取教程
- 嵌入式系统开发-麦子学院(15)-根文件系统
- 【关于win10任务栏卡死的解决】
- python中unicode函数的包_Python unicodeutil包_程序模块 - PyPI - Python中文网
- 如何把项目部署到腾讯云服务器(附带常见错误)
- 英文视频字幕生成和翻译工具、AI拟声工具
- Wayland (简体中文)
- 机器学习中的偏差、方差以及泛化误差
- 直播技术总结(四)音视频数据压缩及编解码基础
- STM32的串口中断详解