`
涛涛饭
  • 浏览: 10068 次
  • 性别: Icon_minigender_1
  • 来自: 山西
社区版块
存档分类
最新评论

动态数组

阅读更多

老师布置的作业完成动态数组

1:Array_1

 

/**

 * 定义一个用来保存整数的动态数组

 * 

 * @author kowloon

 * 

 */

public class Array_1 {

 

// 定义一个长度是0的数组,来表示动态数组存放数据的位置

// 初始状态该下,没有任何数据,长度是0

private int[] src = new int[0];

 

/**

* 将指定的数据添加到数组中

* @param t

*            要添加的数据

*/

public void add(int t) {

// 定义一个新的数组,长度是src的长度+1

int[] dest = new int[src.length + 1];

// 将要添加的数据放到新数组的最后一个位置

dest[dest.length - 1] = t;

// 如果原数组中有数据,这按照下标对应位置放到新数组

for (int i = 0; i < src.length; i++) {

dest[i] = src[i];

}

// 将src指向新数组

src = dest;

}

 

/**

* 获取指定编号的数据

* @param index

*            要获取的数据的编号

* @return 取得的数据

*/

public int get(int index) {

// 要获取的数据就在src数组中

return src[index];

}

 

/**

* 获得动态数组中数据的个数

* @return 返回数据的个数

*/

public int size() {

return src.length;

}

 

/**

* 将指定的数据插入到指定的位置

* @param t

*            要插入的数据

* @param index

*            要插入的下标位置

*/

public void insert(int t, int index) {

//自己完成的作业

// 定义一个新数组,长度是src长度+1

int[] dest = new int[src.length+1 ];

for (int i = 0; i < src.length+1; i++) {

//这里自己要想清楚src。length+1是为什么

//还要一个注意的地方是这个长度的问题

// 如果i<index,则下标对应,如果i>index,

// 则新数组中的下标-1

 

            if (i<index){

            dest[i] = src[i];

           

            }else {

            dest[i] = src[i-1];

            

            }

            dest[index] = t;

 

        }

           

src = dest;

 

}

 

/**

* 修改执行位置的数据

* @param t

*            修改后的数据

* @param index

*            要修改的数据的位置

*/

public void replace(int t, int index) {

src[index] = t;

}

 

/**

* 删除指定位置的数据

* @param index

*            要删除的数据下标位置

*/

public void delete(int index) {

// 定义一个新数组,长度是src长度-1

int[] dest = new int[src.length - 1];

for (int i = 0; i < src.length; i++) {

// 如果i<index,则下标对应,如果i>index,

// 则新数组中的下标-1

if (i < index) {

dest[i] = src[i];

} else if (i > index) {

//要注意这里是-1,思路逻辑要清晰

dest[i - 1] = src[i];

}

}

src = dest;

 

}

}

2  :Array2_1

 

public class Array2_1 {

private int rongliang = 10;// 初始容量

private int zengzhang = 10;// 每次增长的数量

private int count = 0;// 动态数组中的数据个数

//count是每添加一次数据count加一,也就是每用一次.add方法一次count加一

    private int a = 0;//记录初始化数组增长了几次

// 定义一个长度是0的数组,来表示动态数组存放数据的位置

// 初始状态该下,没有任何数据,长度是0

private Integer[] src = new Integer[rongliang];

 

public Array2_1() {

 

}

 

public Array2_1(int rongliang, int zengzhang) {

this.rongliang = rongliang;

this.zengzhang = zengzhang;

}

 

/**

* 将指定的数据添加到数组中

* @param t要添加的数据

*/

public void add(int t) {

// 如果动态数组的长度<容量,

// 则可以直接添加到src从左往右第一个没有数据的位置 

//自己注释这是添加一个数据到src的空位置当中去,也就是说添加这个数据动态数组还是短

if (count < src.length) {

src[count] = t;

} else {

// 如果长度>=容量,就定义新的数组,按照增长数量增加

//自己注释,因为等于时,当添加一个数据时候src的长度也不够了

Integer[] dest = new Integer[src.length + zengzhang];

// 按照下标对应位置放到新数组

for (int i = 0; i < src.length; i++) {

dest[i] = src[i];

}

//自己注释,下面这句话可是不能少,很重要的,自己要细心啊

src = dest;

src[count] = t;

a++;

System.out.println("扩容次数"+"  "+a);

}

count++;

}

 

/**

* 获取指定编号的数据

* @param index

*            要获取的数据的编号

* @return 取得的数据

*/

public int get(int index) {

// 要获取的数据就在src数组中

 

return src[index];

}

/**

* 删除指定位置的数据

* @param index

*            要删除的数据下标位置

*/

 

//自己这个是不需要定义新的数组搞的,还有一种是定义一个新的数组来完成,那种比这个好理解

public void delete(int index) {

for(int i=index;i<count-1;i++){

src[i] = src[i+1];

}

//数据往前赶一位,让最后一个数据变成null

       src[count-1] = null;

       count = count-1;

}

 

/**

* 获得动态数组中数据的个数 src.length是初始数组的长度,不代表动态数组的长度 动态数组的长度表示src中已经存放的数据个数

* @return 返回数据的个数

*/

public int size() {

return count;

}

 

/**

 * 讲指定的数据添加到指定的位置

 * @param t要添加的数据

 * @param index 要插入的下标位置

 */

public void insert(int t, int index){

 

if(count<src.length){

 

for (int i=count;i>=index;i--){

 

if(i>index){

src[i] = src[i-1];

}else{

src[index] = t;

}

}

count = count+1;

 

}else{

Integer[] dest = new Integer[src.length + 1];

 

for(int i=0;i<src.length+1;i++){

if(i<index){

dest[i] = src[i];

}else{

dest[i] = src[i-1];

}

dest[index] = t;

}

src = dest;

 

count = count+1;

  }

 

  }

 

 

/**

 * 修改执行位置的数据

 * 

 * @param t

 *            修改后的数据

 * @param index

 *            要修改的数据的位置

 */

public void replace(int t, int index) {

src[index] = t;

  }

 

}

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics