java线性表添加元素的方法_Java数据结构与算法:线性表的顺序操作实现分析

c9d0bc2300f75f8e42b50c9fbe02174c.png

package XB;

/**

* 通过接口定义一组线性表中的操作

* @author 杜小唱

*

*/

public interface MyList {

int getSize();//返回线性表中元素的个数(数组下标从0开始)

boolean isEmpty();//判断线性表中是否(是否用boolean)包含元素,即判断线性表是否为空

void insert(int i,Object e) ;//为了元素的通用性,e的类型用Object,在线性表的i索引值添加元素e

boolean contains (Object e);//判断线性表中是否(是否用Boolean)包含元素e,包含返回true,不包含返回false

int indexOf(Object e);//返回元素e在线性表中的索引值,如果有返回,没有返回-1

Object remove(Object e);//删除线性表中第一个与e相同的元素,删除成功返回删除元素

Object remove(int i);//删除线性表中指定索引值为i的元素,返回删除元素,如果索引值i越界则报错

Object replace(int i,Object e);//把线性表中索引值为i的元素替换为元素e,返回旧的元素

Object get(int i);//返回线性表中索引值为i的元素

boolean  insertBefore(Object p,Object e);//在线性表中元素p的前面插入元素e(看是否插入成功b5oolean)

boolean  insertAfter(Object p,Object e);//在线性表中元素p的后面插入元素e(看是否插入成功boolean)

}f8516997bd6b23ea149c445d31538ee5.png

ce7979d853849a5199550d266f0c6b78.png

fc14fe424ab7fcb9159763f71fa567e1.png

06516f530895c3d99dceb14f059b5332.png

9daa30ebb00d4c3ad83c00a23dff1f62.png

8770207ad3312a9080f1a85fe89a5e33.png

34b403ceeedfaa1ba9be74ed917b113b.png

f42166b772150da761493b696e2a4447.png

package XB;

/**

* 通过数组来实现线性表

* @author 杜小唱

*

*/

public class MyArrayList implements MyList {

private Object[] listElem;//定义数组来保存数据元素

private int curLen;//保存元素的个数,删除减,插入加.

//构造方法

public MyArrayList(int maxSize){

listElem=new Object[maxSize];//为顺序表分配maxSize个储存单元

}

//返回元素的个数

@Override

public int getSize() {

// TODO Auto-generated method stub

return curLen;

}

//判断线性表是否为空

@Override

public boolean isEmpty() {

// TODO Auto-generated method stub

return curLen==0;

}

//在线性表i位置插入元素e,不是覆盖原本i位置的元素,涉及到数组元素索引值,要考虑是否越界问题

@Override

public void insert(int i, Object e) {

/**

* int len=listElem.length;

int newCount=this.curLen+len;这啥意思啊????答:扩容为原来数组长度的两倍

*/

//int len=listElem.length;

// int newCount=this.curLen+len;

if(curLen==listElem.length){

expandSpace();

}

if(i<0||i>curLen){

throw new IndexOutOfBoundsException("输入不合法");

}

for(int j=curLen;j>i;j--){

listElem[j]=listElem[j-1];

}

listElem[i]=e;

curLen++;

}

//数组扩容

public  void expandSpace(){

Object[] temp=new Object[listElem.length*2];

for( int i=0;i

temp[i]=listElem[i];

}

listElem=temp;//???????

}

//判断线性表中是否存在元素e,存在返回true

@Override

public boolean contains(Object e) {

// TODO Auto-generated method stub

return indexOf(e)>=0;

}

//判断元素e在线性表中的第一次出现的索引值,如果不存在返回-1

@Override

public int indexOf(Object e) {

// TODO Auto-generated method stub

if(e==null){

for(int i=0;i

if(listElem[i]==null){

return i;

}

}

}else{

for(int i=0;i

if(e.equals(listElem[i])){

return i;

}

}

}

return -1 ;

}

//在线性表中删除第一个与e相同的元素

@Override

public Object remove(Object e) {

// TODO Auto-generated method stub

//获得e在线性表中定索引值

int index=indexOf(e);

if(index<0){

return null;//元素e在线性表中不存在

}

return remove(index);

}

//删除指定索引值的元素

@Override

public Object remove(int i) {

// TODO Auto-generated method stub

//判断i是否越界

if(i<0&&i>=curLen){

throw new IndexOutOfBoundsException(i+"越界");

}

//把元素e保存起来

Object old=listElem[i];

//把i+1开始的元素依次前移

for(int i1=0;i1<=curLen-1;i1++){

listElem[i1]=listElem[i1+1];

}

//把最后的元素置为null

listElem[curLen-1]=null;

//修改元素个数

curLen--;

return old;

}

@Override

public Object replace(int i, Object e) {

// TODO Auto-generated method stub

//判断i是否越界

if(i<0&&i>=curLen)

{

throw new IndexOutOfBoundsException(i+"越界");

}

Object old =listElem[i];

listElem[i]=e;

return old;

}

//返回线性表中索引值为i的元素

@Override

public Object get(int i) {

// TODO Auto-generated method stub

if(i<0&&i>=curLen)

{

throw new IndexOutOfBoundsException(i+"越界");

}

return listElem[i ];

}

//在线性表中元素p的前面插入元素e

@Override

public boolean insertBefore(Object p, Object e) {

// TODO Auto-generated method stub

//确定元素p在线性表中的位置

int index =indexOf(p);//返回p第一次出现的位置

//到底有没有,要判断

if(index<0){

return false;//p元素不存在,插入元素不成功

}

//插入元素

insert(index,e);

return true;

}

//在线性表中元素P的后面插入元素e

@Override

public boolean insertAfter(Object p, Object e) {

// TODO Auto-generated method stub

int index=indexOf(p);

if(index<0){

return false;

}

insert(index-1,e);

return true;

}

//重写toString方法

@Override

public String toString() {

// TODO Auto-generated method stub

//把线性表中每个元素链接起来,遍历数组中的每个元素

StringBuilder sb=new StringBuilder();

sb.append("[");

for(int i=0;i

sb.append(listElem[i]+",");

}

sb.append("]");

return sb.toString();

}

}c7b62860929ddc6434967c39169c489d.png

0618a30ec5d622456d5f2d34ca507009.png

package XB;

/**

* 测试MyArrayList

* @author 杜小唱

*

*/

public class MyArrayListTest {

public static void main(String[] args) throws Exception {

// TODO Auto-generated method stub

//1)创建一个MyArrayList对象

MyArrayList list1=new MyArrayList(5);

//判断是否为空

System.out.println(list1.isEmpty());

System.out.println(list1.getSize());

//添加元素

list1.insert(0, "aaa");

list1.insert(1, "bbb");

list1.insert(2, "ccc");

list1.insert(3, "ddd");

list1.insert(4, "eee");

list1.insert(5, "fff");

System.out.println(list1.isEmpty());

System.out.println(list1.getSize());

System.out.println(list1.toString());

//9)在指定元素的前面或者后面插入另外 元素

list1.insertBefore("ccc", "hhh");

System.out.println(list1);

list1.insertAfter("ccc", "kkk");

System.out.println(list1);

list1.insertAfter("vvv", "mmm");

System.out.println(list1);

}

}314e1e018e0cbbc8c52ded7da4c72e54.png

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值