java seqlist_数据结构学习----线性表(Java版的实现)

该博客详细介绍了顺序表(线性表的顺序存储结构)的Java实现,包括构造方法、判断空表、获取长度、获取和设置元素、插入、删除、查找以及相等比较等操作。顺序表使用对象数组存储元素,并提供了扩容机制。此外,还包含了顺序查找和元素的描述字符串生成。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

packagecom.clarck.datastructure.linear;/*** 顺序表(线性表的顺序存储结构)类,实现线性表接口,T是泛型参数,指定任意类

*

*@authorclarck

*

*@param*/

public class SeqList implements LList{/*** 对象数组,保护成员*/

protectedObject[] element;/*** 顺序表长度,记载元素个数*/

protected intlen;/*** 默认构造方法,创建默认容量的空表*/

publicSeqList() {this(64);

}/*** 构造方法,创建容量为size的空表

*

*@paramsize*/

public SeqList(intsize) {this.element = newObject[size];this.len = 0;

}/*** 判断顺序表是否空,若空返回true,O(1)*/@Overridepublic booleanisEmpty() {return this.len == 0;

}/*** 返回顺序表长度,O(1)*/@Overridepublic intlength() {return this.len;

}/*** 返回第i(≥0)个元素。若i<0或大于表长则返回null,O(1)*/@SuppressWarnings("unchecked")

@Overridepublic T get(inti) {if (i >= 0 && i < this.len) {return (T) this.element[i];

}return null;

}/*** 设置第i(≥0)个元素值为x。若i<0或大于表长则抛出序号越界异常;若x==null,不操作*/@Overridepublic void set(inti, T x) {if (x == null)return;if (i >= 0 && i < this.len) {this.element[i] =x;

}else{throw new IndexOutOfBoundsException(i + ""); //抛出序号越界异常

}

}/*** 顺序表的插入操作 插入第i(≥0)个元素值为x。若x==null,不插入。 若i<0,插入x作为第0个元素;若i大于表长,插入x作为最后一个元素*/@Overridepublic void insert(inti, T x) {if (x == null)return;//若数组满,则扩充顺序表容量

if (this.len ==element.length) {//temp也引用elements数组

Object[] temp = this.element;//重新申请一个容量更大的数组

this.element = new Object[temp.length * 2];//复制数组元素,O(n)

for (int j = 0; j < temp.length; j++) {this.element[j] =temp[j];

}

}//下标容错

if (i < 0)

i= 0;if (i > this.len)

i= this.len;//元素后移,平均移动len/2

for (int j = this.len - 1; j >= i; j--) {this.element[j + 1] = this.element[j];

}this.element[i] =x;this.len++;

}/*** 在顺序表最后插入x元素*/@Overridepublic voidappend(T x) {

insert(this.len, x);

}/*** 顺序表的删除操作 删除第i(≥0)个元素,返回被删除对象。若i<0或i大于表长,不删除,返回null。*/@SuppressWarnings("unchecked")

@Overridepublic T remove(inti) {if (this.len == 0 || i < 0 || i >= this.len) {return null;

}

T old= (T) this.element[i];//元素前移,平均移动len/2

for (int j = i; j < this.len - 1; j++) {this.element[j] = this.element[j + 1];

}this.element[this.len - 1] = null;this.len--;returnold;

}/*** 删除线性表所有元素*/@Overridepublic voidremoveAll() {this.len = 0;

}/*** 查找,返回首次出现的关键字为key元素*/@SuppressWarnings("unchecked")

@OverridepublicT search(T key) {int find = this.indexOf(key);return find == -1 ? null : (T) this.element[find];

}/*** 顺序表比较相等 比较两个顺序表是否相等 ,覆盖Object类的equals(obj)方法,O(n)*/@SuppressWarnings("unchecked")

@Overridepublic booleanequals(Object obj) {if (this ==obj)return true;if (obj instanceofSeqList) {

SeqList list = (SeqList) obj;//比较实际长度的元素,而非数组容量

for (int i = 0; i < this.length(); i++) {if (!this.get(i).equals(list.get(i))) {return false;

}

}return true;

}return false;

}/*** 顺序查找关键字为key元素,返回首次出现的元素,若查找不成功返回-1

*

*@paramkey

* 可以只包含关键字数据项,由T类的equals()方法提供比较对象相等的依据

*@return

*/

public intindexOf(T key) {if (key != null) {for (int i = 0; i < this.len; i++) {//对象采用equals()方法比较是否相等

if (this.element.equals(key)) {returni;

}

}

}return -1;

}//返回顺序表所有元素的描述字符串,形式为“(,)”,覆盖Object类的toString()方法

publicString toString() {

String str= "(";if (this.len > 0)

str+= this.element[0].toString();for (int i = 1; i < this.len; i++)

str+= ", " + this.element[i].toString();return str + ") "; //空表返回()

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值